Flask参数解析、请求钩子
转载请注明出处 https://www.cnblogs.com/chenxianpao/p/9949279.html
参数解析
Flask的参数解析主要用Request完成(from flask import request)。
request的Api详解见官方文档http://flask.pocoo.org/docs/1.0/api/#flask.Request。
request的使用详解见官方文档http://flask.pocoo.org/docs/1.0/reqcontext/。
此处主要介绍一些常用的参数解析相关的内容。
request中的几个重要变量:
request.data 字符串类型 存放请求的字符串数据,未经处理
request.files MultiDict类型 存放所有的上传文件列表
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() 夜深了,下回分解
Flask参数解析、请求钩子的更多相关文章
- (三)flask中的请求钩子函数
请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个视图 ...
- flask基础之请求钩子(十二)
前言 什么是请求钩子?在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要统一处理,为了让每个视图函数避免编写重复功能的代码,flask提供了统一的接口可以添加这些处理函数,即请求钩子. 请求钩子 ...
- flask请求钩子、HTTP响应、响应报文、重定向、手动返回错误码、修改MIME类型、jsonify()方法
请求钩子: 当我们需要对请求进行预处理和后处理时,就可以用Flask提供的回调函数(钩子),他们可用来注册在请求处理的不同阶段执行的处理函数.这些请求钩子使用装饰器实现,通过程序实例app调用,以 b ...
- 02 flask 请求钩子、异常捕获、上下文、Flask-Script 扩展、jinja2 模板引擎、csrf防范
一 请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个 ...
- Flask的请求钩子与上下文简览
请求钩子(Hook) 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:在请求开始时,建立数据库连接:在请求结束时,指定数据的交互格式.为了让>每个视图函数避免编写重复功能的代 ...
- flask 之 请求钩子
请求钩子 什么是请求钩子? 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要统一处理,为了让每个视图函数避免编写重复功能的代码,flask提供了统一的接口可以添加这些处理函数,即请求钩子. f ...
- springmvc 请求参数解析细节
springmvc 的请求流程,相信大家已经很熟悉了,不熟悉的同学可以参考下资料! 有了整体流程的概念,是否对其中的实现细节就很清楚呢?我觉得不一定,比如:单是参数解析这块,就是个大学问呢? 首先,我 ...
- Flask框架 之上下文、请求钩子与Flask_Script
一.上下文 请求上下文:request与session 应用上下文:current_app与g:一次请求多个函数可以用它传参 @app.route("/") def index() ...
- django-rest-framework解析请求参数
django-rest-framework解析请求参数 前言 前面的文章中编写了接口, 调通了接口文档. 接口文档可以直接填写参数进行请求, 接下来的问题是如何接受参数, 由于请求方式与参数序列化形式 ...
随机推荐
- selenium+python自动化78-autoit参数化与批量上传【转载】
转至博客:上海-悠悠 前言前一篇autoit实现文件上传打包成.exe可执行文件后,每次只能传固定的那个图片,我们实际测试时候希望传不同的图片.这样每次调用的时候,在命令行里面加一个文件路径的参数就行 ...
- asp.net的Server.MapPath方法
Server.MapPath()的功能: 返回与 Web 服务器上的指定虚拟路径相对应的物理文件路径. 命名空间: System.Web 程序集: System.Web(在 System.Web.dl ...
- 【转载】Python测试框架doctest
原文在这里 :Python测试框架doctest 先记录一下,直接复制粘贴后,排版是乱的,后续再弄.
- angularjs 微信授权登录 微信支付
最近做一个项目,用angular 一个单页应用,打算打包成 跨平台移动App 以及在微信里面使用.给大家一个案例 首先,熟悉一下微信授权部分的源代码,如下所示: javascript 前端代码: va ...
- BZOJ1898: [Zjoi2004]Swamp 沼泽鳄鱼
1898: [Zjoi2004]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 478 Solved: 286[Submit][St ...
- head first (三):装饰者模式
看到别人写的,都看不进去,算了还是自己手写一遍吧,算是帮助自己理解了.写的比较简单,例子也比较好懂,什么时候使用自己看着办. 1.定义 装饰者模式:动态地将职责附加到对象上.若要扩展功能,装饰者提供比 ...
- CSU 2151 集训难度【多标记线段树】
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2151 Input 第一行三个数n,m,v0 表示有n名萌新和m次调整,初始时全部萌新的集训难度 ...
- HDU 3485【101】 51nod 1668【010】 joj 2171【111】动态规划
有一个只含0和1的长度为n的串,问不含有101的所有串的个数. ——不存在连续的101.010.111的字符串数量 HDU:https://cn.vjudge.net/problem/HDU-3485 ...
- 洛谷P3216 [HNOI2011] 数学作业 [矩阵加速,数论]
题目传送门 数学作业 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N和 M,要求计算 Concatenate (1 .. N)Mod M 的值,其中 C ...
- 【SAM】POJ1509-Glass Beads
[题目大意] 求一个循环数列的最小表示法. [思路] 把原创复制一遍放在后面,建立SAM,从s按字典序开始跑长度L即可. 板子来源(作者见连接内):