Python:Flask请求参数和响应探究
2023-09-14 09:07:13 时间
一、参数传递
测试代码
# -*- coding: utf-8 -*-
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=['POST', 'GET'])
def index():
print(request.args)
print(request.form)
print(request.values)
print(request.data)
print(request.json)
return "ok"
if __name__ == '__main__':
app.run(debug=True)
请求测试
1、发送json数据
POST http://127.0.0.1:5000/?age=12
Content-Type: application/json
{
"name": "Tom"
}
收到的数据如下
request.args [('age', '12')]
request.form []
request.values [('age', '12')]
request.data b'{\n"name": "Tom"\n}'
request.json {'name': 'Tom'}
2、发送form数据
POST http://127.0.0.1:5000/?age=12
Content-Type: application/x-www-form-urlencoded
name=Tom
收到的数据如下
request.args [('age', '12')]
request.form [('name', 'Tom')]
request.values [('age', '12'), ('name', 'Tom')]
request.data b''
request.json None
如果request.args
和 request.form
数据相同,会优先取request.args
中的数据
二、升级参数接收
通过测试发现,如果前端没有传递正确的json数据,request.json
会返回一个None
,如果直接取数据会报错,目前主流的传参方式是json数据,我们改装一下:
# -*- coding: utf-8 -*-
from flask import Flask, request, Request
class MyRequest(Request):
@property
def json(self):
"""避免json数据未传递而返回 None"""
try:
data = self.get_json()
except Exception as e:
data = None
return data or {}
@property
def params(self):
"""
将参数全都放入一个变量
参数获取顺序 args > form > json
:return: {dict}
"""
data = {}
for key, value in self.args.items():
data.setdefault(key, value)
for key, value in self.form.items():
data.setdefault(key, value)
for key, value in self.json.items():
data.setdefault(key, value)
return data
app = Flask(__name__)
app.request_class = MyRequest
@app.route("/", methods=['POST', 'GET'])
def index():
print(request.args)
print(request.form)
print(request.values)
print(request.data)
print(request.json)
print(request.params)
return request.params
if __name__ == '__main__':
app.run(debug=True)
MyRequest
类 修改了 json
方法,捕获了异常,避免返回 None
报错,添加了params
方法,将所有参数都封装到里边,简化参数获取,不过不能准确获取参数
三、返回参数
视图函数不能直接返回 list
参数,所以改造一下
# -*- coding: utf-8 -*-
from flask import Flask, request, Request, jsonify
class MyRequest(Request):
@property
def json(self):
"""避免json数据未传递而返回 None"""
try:
data = self.get_json()
except Exception as e:
data = None
return data or {}
@property
def params(self):
"""
将参数全都放入一个变量
处理参数顺序 args > form > json
:return: {dict}
"""
data = {}
for key, value in self.args.items():
data.setdefault(key, value)
for key, value in self.form.items():
data.setdefault(key, value)
for key, value in self.json.items():
data.setdefault(key, value)
return data
class MyFlask(Flask):
request_class = MyRequest
def make_response(self, rv):
"""视图函数可以直接返回list 或者 dict"""
if isinstance(rv, (list, dict)):
return jsonify(rv)
return super().make_response(rv)
def post(self, rule, **options):
"""便于书写post方法"""
options.setdefault('methods', ['POST'])
return self.route(rule, **options)
app = MyFlask(__name__)
@app.post("/")
def index():
return ['cat', 'pig']
if __name__ == '__main__':
app.run(debug=True)
额外添加了post
方法,便于书写post请求
相关文章
相关文章
- Python面试基础知识_python自学需要哪些基础知识
- python skitlearn_Python sklearn
- python win32api messagebox_如何在Python中使用Win32 API?
- python anaconda jupyter_anaconda和pip
- python字符串转化列表_Python列表到字符串的转换[通俗易懂]
- aic准则python_Python数据科学:线性回归
- python中pygame怎么安_Python中pygame安装方法图文详解
- python人工智能学习笔记_[Python] 人工智能与自然语言处理学习笔记(1)[通俗易懂]
- python教程:用简单的Python编写Web应用程序
- python生成器详解_Python 生成器
- 【说站】python循环语句的两种类型
- 【说站】python requests检测响应状态码
- 简述Python特点_python优缺点
- Python的正则表达式_python正则表达式例子
- Python的特点是什么_python具有的特点
- Python udp编程_python socket udp
- Python抛出异常_python抛出异常的作用
- python 语言的自动格式化工具
- Python定制篇-APT软件管理和远程登录
- 【python爬虫】爬取洛谷习题并转为md格式
- python高级线程编程-定时器和周期任务(三)
- python-Python与MongoDB数据库-使用Python执行MongoDB查询(二)
- 一步一步学会在Linux上运行Python程序(linux运行python程序)
- Linux环境下安装Python(linux装python)
- 十分钟学会用Python交易股票
- 用Python仿写MSSQL 编程体验更有趣(python仿mssql)
- 革命性技术:Python与MSSQL的携手合作(python和mssql)
- Linux中如何离开Python环境(linux怎么退出python)
- python列表去重的二种方法
- 浅析python中__name__='__main__'的作用