转载请注明出处 http://www.javashuo.com/article/p-anixdrgd-t.html html
参数解析数据库
Flask的参数解析主要用Request完成(from flask import request)。json
request的Api详解见官方文档http://flask.pocoo.org/docs/1.0/api/#flask.Request。flask
request的使用详解见官方文档http://flask.pocoo.org/docs/1.0/reqcontext/。api
此处主要介绍一些经常使用的参数解析相关的内容。服务器
request中的几个重要变量:session
request.data 字符串类型 存放请求的字符串数据,未经处理多线程
request.files MultiDict类型 存放全部的上传文件列表app
request.form ImmutableMultiDict类型 存放表单数据函数
request.is_json 函数 判断数据是否为json数据
request.is_multiprocess 函数 判断此应用是否为多进程WSGI服务
request.is_multithread 函数 判断此应用是否为多线程WSGI服务
request.json Dict类型 存放json类型的数据
request.view_args Dict类型 存放URL中定义的变量 好比/login/<string: username>,会存放{"username": "xxx"}
request.args ImmutableMultiDict类型 存放URL中?后面的变量
request.values CombinedMultiDict类型 是args和form的组合
拿经常使用的GET、POST、PUT、DELETE方法举例。
GET方法:
变量名不重复型:/login?username=cxp&password=cxp
username = request.args.get('username', '') password = request.args.get('password', '')
变量名重复型:/login?username=cxp&password=cxp&password=cpp
params = dict() for i, j in request.args.iterlists(): params[i] = j print params # {'username': [u'cxp'], 'password': [u'cxp', u'cpp']}
request.data/request.form/request.json无数据,request.args和request.values存放数据。
POST、PUT、DETELTE方法:
form-data型:/login
username = request.form.get('username', '') password = request.form.get('password', '')
request.data/request.args/request.json都为空,仅request.form和request.values有数据。
json型:/login
args = request.json
或者
args = request.get_json()
request.args/request.form/request.values为空,request.data为裸数据,request.json有字典数据。
其实准确的说不该该用HTTP方法来作分类。若是是URL中直接带参数的方式,接口中均可以用request.args变量去获取参数。若是是form-data的类型,则能够用request.form变量去获取参数。若是是json类型,则用request.json去获取参数。另外由于Flask可能会用wtforms来作表单验证,建议接口中的key为固定值而非变量,不然作表单验证时会比较不方便。
钩子函数
before_request() 注册一个函数,在每一个请求以前执行。一般用于数据库的链接或者从session中获取信息等操做。
@app.before_request def bf_request(): g.string = 'before_request'
before_first_request() 注册一个函数,在处理第一个请求以前运行。通用用于仅需执行一次的操做,并且须要第一次请求来触发。
@app.before_first_request def bf_first_request(): g.string = 'before_first_request'
after_request() 注册一个函数,在每次请求以后运行。注册的函数至少须要含有一个参数,这个参数实际上为服务器的响应,且函数中须要返回这个响应参数。
@app.after_request def af_request(param): return param
teardown_request() 注册一个函数,一样在每次请求以后运行。注册的函数至少须要含有一个参数,这个参数实际上为服务器的响应,且函数中须要返回这个响应参数。
@app.teardown_request def td_request(param): return param
teardown_appcontext() 夜深了,下回分解
before_app_request() 夜深了,下回分解
before_app_first_request() 夜深了,下回分解