get/post 方式,form/数据的获取

 
 注册  登录

Flask request获取参数问题

      学习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)

get/post 方式,form/数据的获取_第1张图片
整体代码截图

分别通过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

get/post 方式,form/数据的获取_第2张图片
postman get 发送请求配置1
get/post 方式,form/数据的获取_第3张图片
pycharm debuger 窗口变量截图1

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

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

get/post 方式,form/数据的获取_第4张图片
postman post发送请求配置2
get/post 方式,form/数据的获取_第5张图片
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--

get/post 方式,form/数据的获取_第6张图片
postman post发送请求配置3
get/post 方式,form/数据的获取_第7张图片
pycharm debuger 窗口变量截图3

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

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

get/post 方式,form/数据的获取_第8张图片
postman post发送请求配置4
get/post 方式,form/数据的获取_第9张图片
pycharm debuger 窗口变量截图4

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

试验5:补充实验

get/post 方式,form/数据的获取_第10张图片
postman post发送请求配置5
get/post 方式,form/数据的获取_第11张图片
pycharm debuger 窗口变量截图5

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


你可能感兴趣的:(http)