Python3 web 框架 Flask
作者: dkvirus 发表于: 2018-09-29 16:27:19 最近更新: 2018-10-17 13:29:06

一、介绍

Flask 是 python3 的 web 框架,类似于 Node 中的 Express 和 Koa,相比于原生处理 http 请求,要方便不少。一个简单的demo如下:

1
2
3
4
5
6
7
8
9
10
from flask import Flask

app = Flask(__name__)

@app.route('/', methods=['GET'])
def home():
return '<h1>Home</h1>'

if __name__ == '__main__':
app.run()

二、请求

web 处理中最重要的就是如何接收客户端传来的参数,下面介绍几种常用的方法。

1. /user/<name>

1
2
3
4
5
6
7
8
9
10
11
@app.route('/user/<username>')
def show_user_profile(username):
return 'User %s' % username

@app.route('/post/<int:post_id>')
def show_post(post_id):
return 'Post %d' % post_id

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
return 'Subpath %s' % subpath
类型 说明
string (缺省值) 接受任何不包含斜杠的文本
int 接受正整数
float 接受正浮点数
path 类似 string ,但可以包含斜杠

2. /user?name=dkvirus

1
2
3
4
5
6
from flask import Flask, request

@app.route('/user')
def getUser(username):
name = request.args.get('name')
print(name) # dkvirus

3. 接收请求体中的数据

1
2
3
4
5
6
from flask import Flask, request

@app.route('/user')
def getUser(username):
name = request.json['name']
print(name) # dkvirus

4. 接收表单提交的数据

1
2
3
4
5
6
from flask import Flask, request

@app.route('/user')
def getUser(username):
name = request.form['name']
print(name) # dkvirus

5. 接收文件上传数据

处理文件上传切记在表单中添加 enctype="multipart/form-data" 属性。

1
2
3
4
5
6
from flask import Flask, request

@app.route('/upload', methods=['POST'])
def upload_file():
f = request.files['the_file']
f.save('/var/www/uploads/uploaded_file.txt')

三、响应

服务端处理业务之后,响应类型不同,下面简单介绍几种常见的响应类型。

1. 返回 html

1
2
3
@app.route('/')
def index():
return '<h1>hello world</h1>'

2. 返回 json

1
2
3
4
5
from flask import Flask, jsonify

@app.route('/')
def index():
return jsonify({ 'name': 'dkvirus' })

3. 返回 string

1
2
3
@app.route('/')
def index():
return 'hello world'

四、配置

1. 设置其他ip也能访问

falsk 默认只会监听当前机器的 ip,如果要其它 ip 也能访问可以添加 host 配置。

1
2
if __name__ == '__main__':
app.run(host='0.0.0.0')

2. 设置访问端口

flask 默认访问端口为 5000,可自定义启动端口。

1
2
if __name__ == '__main__':
app.run(port=5500)

3. 设置热更新

flask 默认情况下,修改代码要重新启动才能生效,通过配置可以做到热更新,代码更新,服务自动重启,不可谓不方便。

1
2
3
4
5
6
7
if __name__ == '__main__':
app.run(debug=True)

# 启动服务看到下面 Debug mode 值为 on 即生效了
# * Serving Flask app "index" (lazy loading)
# ........
# * Debug mode: on

4. 中文乱码

1
2
if __name__ == '__main__':
app.run(json_as_ascii=False)

5. 配置文件

配置属性可以选择写在 app.run() 中,也可以单独写在配置文件中,写在配置文件中,配置名称要大写。

1
2
3
4
# config.py
# encoding:utf-8

DEBUG = True
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# main
# coding:utf-8
from flask import Flask
import config

app = Flask(__name__)
# 载入配置文件
app.config.from_object(config)

@app.route('/')
def hello_world():
return 'hello'

if __name__ == '__main__':

五、其它

1. 静态资源目录

flask 也支持 mvc 模式开发,模板引擎为 Jinja2。静态文件木人放在根目录下的 static 目录下,如何自定义静态资源目录未知….

1
2
url_for('static', filename='style.css')
static/style.css

2. 解决跨域访问

跨域问题需要安装 flask_cors 第三方包。

1
2
3
from flask_cors import CORS

CORS(app, supports_credentials=True)
首页
友链
归档
dkvirus
动态
RSS