flask解析http请求数据

解析get请求参数

本文介绍flask如何解析http的get请求的参数, 解析post请求提交的表单和json数据, get请求用于查询数据,通常会带有参数,参数放在path的后面,中间用问号连接,多个请求参数以key=value的形式用&连接起来,下面是一个带参数的get请求的示例url

http://127.0.0.1:5000/users?name=poly&age=14

关于一个url的结构,请参考文章todo

get请求的参数可以通过request.args来获得,也可以通过request.values来获得

request.args 是包含解析过的get参数的MultiDict,MultiDict 是werkzeug提供的一种多key字典,具体可参考 https://werkzeug.palletsprojects.com/en/0.16.x/datastructures/#werkzeug.datastructures.MultiDict ,本文不做过多介绍

下面是使用方法示例

@app.route('/users', methods=['GET', 'POST'])
def users():
    name = request.args['name']
    age = request.args['age']
    print(name, age)
    return 'ok'

需要注意的是,获取到的参数一律都是字符串类型,使用时需要你自己做类型转换

获得post请求表单数据

post请求用于新增数据,它提交数据的格式有两种,一种是form表单,一种是json数据,requests.form里存储着post请求提交的form表单数据,下面是解析示例

@app.route('/users', methods=['POST'])
def users():
    name = request.form['name']
    age = request.form['age']
    print(name, age)
    return 'ok'

使用request.values

不论是request.args, 还是request.form,其类型都是MultiDict,因此,flask又提供了一个request.values,类型为CombinedMultiDict,它包含了args和form,这样,在获取数据时,就不必在纠结到底用args还是用form了,request.values使用方法与args,form相同,不再举例子

获得json数据

客户端的post请求,put请求,有可能提交的是json数据,而非form表单数据,关于form表单和json数据,可以参考这篇文章中关于post请求的讲解todo

post提交的json数据,不能通过args,form.values来获取,而是要用get_json()方法来获取

服务端示例代码

@app.route('/users', methods=['POST'])
def users():
    data = request.get_json()
    print(data)
    return 'ok'

客户端示例代码

import requests

res = requests.post('http://127.0.0.1:5000/users', json={'name': 'poly', 'age': 13})

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案