Python Web框架Flask下网站开发入门实例


Posted in Python onFebruary 08, 2015

一、Flask简介

Flask 是一个 Python 实现的 Web 开发微框架。官网:http://flask.pocoo.org/

二、Demo

1、代码结构

.

├── blog.py

├── static

│   ├── css

│   │   └── index.css

│   ├── images

│   │   ├── cat.jpg

│   │   └── sheying1229.jpg

│   └── js

└── templates

    ├── index.html

    ├── login.html

    ├── regist.html

    └── upload.html
5 directories, 8 files

2、主程序blog.py

#!/usr/bin/python

#coding:utf8
from flask import Flask, render_template, url_for, request,redirect,make_response,session

import os,MySQLdb
app = Flask(__name__)

app.secret_key='afjlsjfowflajflkajfkjfkaljf'

user_list = ['jim','max','py']
imagepath = os.path.join(os.getcwd(),"static/images")
@app.route('/')

def index():

    username = request.cookies.get('username')

    if not username:

        username = u'请先登录'

    islogin = session.get('islogin')

    nav_list = [u'首页',u'经济',u'文化',u'科技',u'娱乐']

    blog = {'title':'welcome to my blog','content':'hello, welcome to my blog.'}

    blogtag = {'javascript':10,"python":20,"shell":5}

    img = url_for('static', filename="images/cat.jpg")

    return render_template('index.html', nav_list=nav_list, username=username, blog = blog, blogtag = blogtag, img=img, islogin=islogin)
@app.route('/reg', methods=['GET','POST'])

def regist():

    if request.method == 'POST':

        username = request.form['username']

        conn = MySQLdb.connect(user='root',passwd='admin',host='127.0.0.1')

        conn.select_db('blog')

        curr = conn.cursor()

        sql = 'insert into `user` (`id`,`username`) values (%d,"%s")' % (1,username)

        curr.execute(sql)

        conn.commit()

        curr.close()

        conn.close()

        return "user %s regist ok!" % request.form['username']

    else:

        #request.args['username']

        return render_template('regist.html')
@app.route('/upload', methods=['GET','POST'])

def upload():

    if request.method == 'POST':

        username = request.form['username']

        file = request.files['img']

        filename = file.filename

        file.save(os.path.join(imagepath,filename))

        return "<img src='static/images/%s' alt=''/>" % filename

    else:

        return render_template('upload.html')
@app.route('/login/', methods=['GET','POST'])

def login():

    if request.method == 'POST':

        username = request.form.get('username')

        if username in user_list:

            response = make_response(redirect('/'))

            response.set_cookie('username', value=username, max_age=300)

            session['islogin'] = '1'

            return response

        else:

            session['islogin'] = '0'

            return redirect('/login/')

    else:

        return render_template('login.html')
if __name__ == '__main__':

    app.run(debug=True,host='0.0.0.0',port=5000)

主要有首页、注册、登录、上传页面。

blog.py主要是展示了Flask中常见功能用法:路由,数据库操作,cookie,session,redirect,表单,文件上传,调试,Web服务器的IP和端口,静态文件读取等。

3、首页模板index.html

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8"/>

    <title>Flask DEMO</title>

    <link rel="stylesheet" type="text/css" href="static/css/index.css"/>

</head>

<body>

    <div class="header">

        {%if islogin == '1' %}

        <h1>Welcome ,{{username}}!</h1>

        {%else%}

        <h1>{{username}}!</h1>

        {%endif%}

        <div class="nav">

            <ul>

                {%for nav in nav_list%}

                <li><a href="{{nav}}">{{nav}}</a></li>

                {%endfor%}

            </ul>

        </div>

    </div>

    <div class="container">

        <div class="item">

            <h1>{{blog['title']}}</h1>

            <div class="content">

                <img src="/static/images/cat.jpg" alt="cat" />

                <p>{{blog['content']}}</p>

                <img src="{{img}}" alt="cat" />

            </div>

        </div>

        <div class="side">

            <ul>

                {%for key,value in blogtag.items()%}

                    <li>{{key}}({{value}})</li>

                {%endfor%}

            </ul>

        </div>

    </div>

</body>

</html>

这个模板主要展示了在Flask模板中如何读取各种类型的变量。

4、登录页面login.html

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8"/>

    <title>Login</title>

    <link rel="stylesheet" type="text/css" href="static/css/index.css"/>

</head>

<body>

    <div class="header">

        <h1>Login</h1>

    </div>

    <div class="container">

        <div class="item">

            <form action="" method="post">

                <input type="text" placeholder="please input username" name="username" /><br/>

                <input type="submit" value="Login"/>

            </form>

        </div>

    </div>

</body>

</html>

结合blog.py主要展示表单如何提交取值,cookie和session应用。

5、注册页面regist.html

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8"/>

    <title>Regist</title>

    <link rel="stylesheet" type="text/css" href="static/css/index.css"/>

</head>

<body>

    <div class="header">

        <h1>Regist</h1>

    </div>

    <div class="container">

        <div class="item">

            <form action="" method="post">

                <input type="text" placeholder="please input username" name="username" /><br/>

                <input type="submit" value="Regist"/>

            </form>

        </div>

    </div>

</body>

</html>

结合blog.py主要展示了数据库操作。

6、上传页面upload.html

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8"/>

    <title>Upload</title>

    <link rel="stylesheet" type="text/css" href="static/css/index.css"/>

</head>

<body>

    <div class="header">

        <h1>Upload</h1>

    </div>

    <div class="container">

        <div class="item">

            <form action="" method="post" enctype="multipart/form-data">

                <input type="text" name="username" /><br/>

                <input type="file" name="img" /><br/>

                <input type="submit" value="Upload"/>

            </form>

        </div>

    </div>

</body>

</html>

结合blog.py主要展示了如何上传文件。

7、运行效果

Python Web框架Flask下网站开发入门实例

Python 相关文章推荐
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 Python
Python编程实现正则删除命令功能
Aug 30 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
python实现泊松图像融合
Jul 26 Python
python根据多个文件名批量查找文件
Aug 13 Python
Python字典生成式、集合生成式、生成器用法实例分析
Jan 07 Python
python从内存地址上加载python对象过程详解
Jan 08 Python
Python类super()及私有属性原理解析
Jun 15 Python
基于matplotlib中ion()和ioff()的使用详解
Jun 16 Python
keras实现theano和tensorflow训练的模型相互转换
Jun 19 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
在python中对于bool布尔值的取反操作
Dec 11 Python
Python中使用wxPython开发的一个简易笔记本程序实例
Feb 08 #Python
Python常用的日期时间处理方法示例
Feb 08 #Python
Python中使用PIL库实现图片高斯模糊实例
Feb 08 #Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 #Python
Python Web框架Flask中使用七牛云存储实例
Feb 08 #Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 #Python
Python Web框架Flask中使用新浪SAE云存储实例
Feb 08 #Python
You might like
一个高ai的分页函数和一个url函数
2006/10/09 PHP
php fsockopen伪造post与get方法的详解
2013/06/14 PHP
php fsockopen解决办法 php实现多线程
2014/01/20 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
php生成二维码图片方法汇总
2016/12/17 PHP
php查询及多条件查询
2017/02/26 PHP
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
js replace()去除代码中空格的实例
2017/02/14 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
python实现apahce网站日志分析示例
2014/04/02 Python
Python写的一个简单监控系统
2015/06/19 Python
带你了解python装饰器
2017/06/15 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
python实现比较文件内容异同
2018/06/22 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
如何用C代码给Python写扩展库(Cython)
2019/05/17 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
Django使用unittest模块进行单元测试过程解析
2019/08/02 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
Julep官网:美容产品和指甲油
2017/02/25 全球购物
2015年法制宣传月活动总结
2015/03/26 职场文书
活动经费申请报告
2015/05/15 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技