分类: python3

FLASK接受POST以form表单形式发送请求,并解析参数

FLASK接受POST以form表单形式发送请求,并解析参数

发动的json请求体,如下格式 {'key1': 'value1', 'key2': 'value2'} 如果POST发送的json请求体,request.form将接收不到数据 如果以form表单形式发送post请求的json数据request.form将能接收到数据

form表单形式对应的接收程序如下:

from flask import Flask, request, jsonify
import json
app = Flask(__name__)
@app.route('/form', methods=["POST"])
def post_formdata():
    if request.method == 'POST':
        print(request.form)
        print(request.values)
        print(request.form.get("key1"))
        print(request.values.get("key1"));
        print(json.dumps(request.form))
        print(request.form.to_dict())
    return json.dumps(request.form)

如果是json的方式提交的数据打印的结果如下:(将得不道数据)

ImmutableMultiDict([]) CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([])]) None None {} {}

这种的要发送json数据的正确方式是以form表单形式发送post

对应以表单form发送的Python的程序如下:

import requests, json
'''
Reqeusts支持以form表单形式发送post请求,只需要将请求的参数构造成一个字典,然后传给requests.post()的data参数即可。
'''
url = 'http://127.0.0.1:5000/form'
s={'key1':'value1','key2':'value2'}
r_json=requests.post(url=url,data=s,headers={'Content‐Type':'application/x‐www‐form‐urlencoded'})
print(r_json)
print(r_json.text)
print(r_json.content)
#方法2
s = {'key1': 'value1', 'key2': 'value2'}
r = requests.post(url, data=s)
print(r.text)

对应接收的值如下: ImmutableMultiDict([('key1', 'value1'), ('key2', 'value2')]) CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('key1', 'value1'), ('key2', 'value2')])]) value1 value1 {"key1": "value1", "key2": "value2"} {'key1': 'value1', 'key2': 'value2'}