• 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() 夜深了,下回分解

  • 相关阅读:
    IOS笔记-C语言中的字符串数组 指针
    IOS笔记-C语言中的指针与数组
    Entity Framework 知识点总结
    提升代码内外部质量的22条经验(转载)
    WPF 第一个创建的窗体会作为Application.Current.MainWindow
    重构的十个小技巧(转)
    WPF DataGrid自定义分页控件_实现下拉刷新数据
    使用qt生成安卓android运用
    关于开发省流量手机游戏的一些建议
    c++ com 在c#项目里面使用简单例子
  • 原文地址:https://www.cnblogs.com/chenxianpao/p/9949279.html
Copyright © 2020-2023  润新知