转载请注明出处 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参数解析、请求钩子的更多相关文章

  1. (三)flask中的请求钩子函数

    请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个视图 ...

  2. flask基础之请求钩子(十二)

    前言 什么是请求钩子?在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要统一处理,为了让每个视图函数避免编写重复功能的代码,flask提供了统一的接口可以添加这些处理函数,即请求钩子. 请求钩子 ...

  3. flask请求钩子、HTTP响应、响应报文、重定向、手动返回错误码、修改MIME类型、jsonify()方法

    请求钩子: 当我们需要对请求进行预处理和后处理时,就可以用Flask提供的回调函数(钩子),他们可用来注册在请求处理的不同阶段执行的处理函数.这些请求钩子使用装饰器实现,通过程序实例app调用,以 b ...

  4. 02 flask 请求钩子、异常捕获、上下文、Flask-Script 扩展、jinja2 模板引擎、csrf防范

    一 请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个 ...

  5. Flask的请求钩子与上下文简览

    请求钩子(Hook) 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如:在请求开始时,建立数据库连接:在请求结束时,指定数据的交互格式.为了让>每个视图函数避免编写重复功能的代 ...

  6. flask 之 请求钩子

    请求钩子 什么是请求钩子? 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要统一处理,为了让每个视图函数避免编写重复功能的代码,flask提供了统一的接口可以添加这些处理函数,即请求钩子. f ...

  7. springmvc 请求参数解析细节

    springmvc 的请求流程,相信大家已经很熟悉了,不熟悉的同学可以参考下资料! 有了整体流程的概念,是否对其中的实现细节就很清楚呢?我觉得不一定,比如:单是参数解析这块,就是个大学问呢? 首先,我 ...

  8. Flask框架 之上下文、请求钩子与Flask_Script

    一.上下文 请求上下文:request与session 应用上下文:current_app与g:一次请求多个函数可以用它传参 @app.route("/") def index() ...

  9. django-rest-framework解析请求参数

    django-rest-framework解析请求参数 前言 前面的文章中编写了接口, 调通了接口文档. 接口文档可以直接填写参数进行请求, 接下来的问题是如何接受参数, 由于请求方式与参数序列化形式 ...

随机推荐

  1. FineReport——FS

    FR除了能够实现对报表等的二次开发,还能实现对决策系统的操作: FS.Trans.signOut() 退出决策平台系统 FS.tabPane._doCloseTab(FS.tabPane._getSe ...

  2. maven设置打jar包并引入依赖包

    --------------------------------------------------------方法一:将jar包和项目打在一起---------------------------- ...

  3. 机器学习方法(七):Kmeans聚类K值如何选,以及数据重抽样方法Bootstrapping

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入.我的博客写一些自己用得到东西,并分享给 ...

  4. Web测试中容易被忽略的Charset问题

    今天继续进行一个更综合的脚本制作,录制设置.进行录制.脚本修改,一切都轻车熟路,进行得很顺利.经过近一个小时的对比和修改,OK,脚本大功告成,终于可以小试牛刀了,嘿嘿.    运行,replay lo ...

  5. LOJ #6278. 数列分块入门 2-分块(区间加法、查询区间内小于某个值x的元素个数)

    #6278. 数列分块入门 2 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 6   题目描述 给出 ...

  6. 转:西部数据NAS设备hack

    通过该文学习一下常见硬件web漏洞.重点关注一下几个方面: 1.登录验证代码: 2.文件上传代码: 3.system/exec/popen等是否存在注入可能: 4.调用二进制文件: 5.未登陆可以访问 ...

  7. 深入了解HTTP协议

    1.HTTP协议简介 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准. 1.1背景 设计HT ...

  8. 基于SAAJ的客户端

    概述 SAAJ - SOAP with Attachments API for JAVA 结构图如下: 正文 1. 如何获取soap请求的关键参数 关键的参数有四个: xmlns - xml命名空间如 ...

  9. Flask实战第55天:cms轮播图上传到七牛功能完成

    登录七牛云,进入“对象存储”, 新建存储空间(Bucket), 我创建的空间命名为flask-bbs 创建完Bucket,七牛会给我们提供一个测试域名,生产环境中,我们需要绑定自己的域名 在个人面板中 ...

  10. [BZOJ3990][SDOI2015]排序(DFS)

    3990: [SDOI2015]排序 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 902  Solved: 463[Submit][Status][ ...