Python:Flask请求参数和响应探究

简介: Python:Flask请求参数和响应探究

一、参数传递

测试代码


# -*- 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请求

相关文章
|
4月前
|
算法 关系型数据库 Python
配电网中考虑需求响应(Python代码实现)【硕士论文复现】
配电网中考虑需求响应(Python代码实现)【硕士论文复现】
|
7月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
662 77
|
4月前
|
运维 算法 新能源
基于风光储能和需求响应的微电网日前经济调度(Python代码实现)
基于风光储能和需求响应的微电网日前经济调度(Python代码实现)
115 0
|
5月前
|
JSON 数据挖掘 API
闲鱼商品列表API响应数据python解析
闲鱼商品列表API(Goodfish.item_list)提供标准化数据接口,支持GET请求,返回商品标题、价格、图片、卖家信息等。适用于电商比价、数据分析,支持多语言调用,附Python示例代码,便于开发者快速集成。
|
5月前
|
JSON 自然语言处理 API
闲鱼商品详情API响应数据python解析
闲鱼商品详情API(goodfish.item_get)通过商品ID获取标题、价格、描述、图片等信息,支持Python等多语言调用。本文提供Python请求示例,包含请求构造与数据处理方法。
|
11月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
5月前
|
JSON API 数据格式
微店商品列表API响应数据python解析
微店商品列表API为开发者提供稳定高效获取商品信息的途径,支持HTTP GET/POST请求,返回JSON格式数据,含商品ID、名称、价格、库存等字段,适用于电商数据分析与展示平台搭建等场景。本文提供Python调用示例,助您快速上手。
|
6月前
|
JSON 数据格式 Python
解决Python requests库POST请求参数顺序问题的方法。
总之,想要在Python的requests库里保持POST参数顺序,你要像捋顺头发一样捋顺它们,在向服务器炫耀你那有条不紊的数据前。抓紧手中的 `OrderedDict`与 `json`这两把钥匙,就能向服务端展示你的请求参数就像经过高端配置的快递包裹,里面的商品摆放井井有条,任何时候开箱都是一种享受。
136 10
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
675 86
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
294 2

推荐镜像

更多