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

相关文章
|
6天前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
|
6天前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
|
6天前
|
JSON 关系型数据库 测试技术
使用Python和Flask构建RESTful API服务
使用Python和Flask构建RESTful API服务
|
16天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
49 2
|
25天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
28 2
|
7天前
|
JSON API 数据格式
使用Python和Flask构建简单的Web API
使用Python和Flask构建简单的Web API
|
27天前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
构建RESTful APIs:使用Python和Flask
29 1
|
1月前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
【10月更文挑战第12天】本文介绍了如何使用Python和Flask构建一个简单的RESTful API。首先概述了API的重要性及RESTful API的基本概念,接着详细讲解了Flask框架的特性和安装方法。通过创建一个基本的Flask应用,定义了处理“图书”资源的GET、POST、PUT和DELETE方法的路由,展示了如何处理请求和响应,以及如何进行错误处理。最后,提供了运行和测试API的方法,总结了Flask在构建RESTful API方面的优势。
36 1
|
1月前
|
JSON API 数据格式
构建RESTful APIs:使用Python和Flask
【10月更文挑战第10天】本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web应用框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了代码示例。通过这些步骤,读者可以快速掌握使用Flask构建RESTful API的方法。
52 1
|
1月前
|
数据库 开发者 Python
使用Python和Flask构建Web应用
【10月更文挑战第2天】使用Python和Flask构建Web应用
28 2
下一篇
无影云桌面