# Flask基础
参考资料:
- POSIX信号和自定义signal函数 (opens new window)
- 使用subprocess模块调用子进程并获取输出 (opens new window)
- python中的subprocess.Popen使用 (opens new window)
# 入门
说起Python的web框架,首先想到的是:
- Django:全能型框架,有很多模块,比较重。
- Flask:轻量级框架。
- Tornado:高性能框架,支持异步处理。
这里,我们以Flask入手。下面是一个简单的Flask应用:
from flask import Flask, request
app = Flask(__name__)
@app.route("/<name>")
def hello(name):
return f"Hello, {escape(name)}!"
if __name__ == '__main__':
app.run(host='0.0.0.0')
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 路由
# 获取参数
参考资料:
- flask 获取GET和POST请求参数 (opens new window)
- Flask中'endpoint'(端点)的理解 (opens new window)
- Flask中endpoint的理解 (opens new window)
除了上面获取参数的方式外,还有如下:
@app.route("/test", methods=["GET", "POST"])
def process():
targetVar="this is your world"
if request.method == "GET":
targetVar = request.args.get("content")
# targetVar = request.values.get("content")
if request.method == "POST":
print("original data:%s" % request.get_data())
if request.content_type.startswith('application/json'):
# targetVar = request.get_json()["content"]
print("deal in application/json")
targetVar = request.json.get('content')
elif request.content_type.startswith('multipart/form-data'):
print("deal in multipart/form-data")
targetVar = request.form.get('content')
elif request.content_type.startswith('application/x-www-form-urlencoded'):
print("deal in application/x-www-form-urlencoded")
targetVar = request.form.get('content')
else:
print("deal in other")
targetVar = request.values.get("content")
print('print result %s' % targetVar)
return targetVar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
注意:
- 当用Postman发送multipart/form-data,以及application/x-www-form-urlencoded这两种类型时,不要自己定义Content-Type,使用它默认的值。
# 响应
参考资料:
@app.route('/')
def helloworld():
return 'helloworld' #相当于
return 'helloworld',200
return Response(response='hello world',status=200,mimetype='text/html')
return make_response('page_four page', 200, {"name": "page four"})
1
2
3
4
5
6
2
3
4
5
6