Flask request获取参数问题

作者: 码农的happy_life | 来源:发表于2016-09-02 20:56 被阅读29874次

          学习Flask差不多两个月了,说起来主要是为了帮忙做一个外包。整个过程就是不断调整需求,看书,查文档,实践的循环。参考书主要是安道翻译《Flask Web开发:基于Python的Web应用开发实战》。现在也是个入门级水平,对于flask request 获取参数进行一个总结。

    知识点:

    request请求总体分为两类:

    1.get请求 

    访问时会在地址栏直接显示参数不安全,且参数大小比较小。

    2.post请求 

    参数不显示在地址栏,一般用户注册、登录都通过post请求完成。

    flask获取参数方式:

    request.form.get("key", type=str, default=None) 获取表单数据

    request.args.get("key") 获取get请求参数

    request.values.get("key") 获取所有参数

    本文主要介绍以上三种方式,其次也有获取解析json数据格式,request.get_json(),这里不进行详细介绍了。

    下面直接开始试验,以用户注册为例:

    需要获取四个参数:用户手机号、密码、校验密码、手机验证码

    mobile = request.form.get("mobile")

    password = request.form.get("password",type=str,default=None)

    password_repeat = request.form.get("password_repeat",type=str,default=None)

    mobile_code = request.form.get("mobile_code",type=str,default=None)

    整体代码截图

    分别通过3中方式获取参数:request.form, request.args,request.values

    postForm= request.form

    getArgs= request.args

    postValues= request.values

    试验:

    试验1::Get请求:将参数直接拼接在url上,以下均以postman, pycharm调试窗截图说明。

    url:http://127.0.0.1:5000/register?mobile=18817366807&password=123456&password_repeat=123456&mobile_code=111111

    postman get 发送请求配置1 pycharm debuger 窗口变量截图1

          在get请求下,request.form无法获取参数,其他两者都可以。

    试验2:通过postman将get请求改为post请求

    postman post发送请求配置2 pycharm debuger 窗口变量截图2

            在post请求下,request.form无法获取有效参数,其他两者都可以,当然content-type/form-data 发生改变,当然这里可也简单理解为该请求为伪post请求。

    试验3:post请求,在body内创建form-data参数成员

    POST /register?mobile=18817366807&password=123456&password_repeat=123456&mobile_code=111111 HTTP/1.1

    Host: 127.0.0.1:5000

    Cache-Control: no-cache

    Postman-Token: 31fff394-653b-ac72-6011-313518d4c2eb

    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

    ------WebKitFormBoundary7MA4YWxkTrZu0gW

    Content-Disposition: form-data; name="formmember"

    form

    ------WebKitFormBoundary7MA4YWxkTrZu0gW--

    postman post发送请求配置3 pycharm debuger 窗口变量截图3

            三者全部获得参数值,最让人困惑的是postForm获得了mobile等值。此外需要注意的是postValues中含有全部的参数。

    试验4:post请求,删除get部分参数

    postman post发送请求配置4 pycharm debuger 窗口变量截图4

           这次的结果倒是符合预期,postForm获得form表单数据,postValues也能获取到。

    试验5:补充实验

    postman post发送请求配置5 pycharm debuger 窗口变量截图5

    综上,可以得出结论,request.form.get("key", type=str, default=None) 获取表单数据,request.args.get("key") 获取get请求参数,request.values.get("key") 获取所有参数。推荐使用request.values.get().

    相关文章

      网友评论

      • 懒人_旭:希望能添加介绍request.file的内容
        再不嘚瑟了:file就是附加在请求里的文件路径,你需要写到服务器上,说简单点就是客户端上传的文件,你需要拷贝一份,或者你可以直接读取file中的内容
      • 宁静消失何如:request.get_json() 这个方法是怎么部署的? 我的python3上默认没有 去github上也搜索不到
      • 8af9210632c6:形如 http://localhost/model/id/1 这种url,里面要表达的意思是id=1,请问这种参数要怎么在flask里面获取呢
        码农的happy_life:后台controller,函数名后参数申明(int:id)直接通过读取id即可

      本文标题:Flask request获取参数问题

      本文链接:https://www.haomeiwen.com/subject/lybvsttx.html