快速上手Flask(二) flask-restful以及全局响应配置

文章目录

快速上手Flask(二) flask-restful以及全局响应配置

什么是flask-restful

GitHub:https://github.com/flask-restful/flask-restful

英文文档:https://flask-restful.readthedocs.io/en/latest/

中文文档:http://www.pythondoc.com/Flask-RESTful/

Flask-RESTful 就是 Flask 扩展中的佼佼者,它增加了对快速构建 RESTful API 的支持,将 Flask 封装了一层,使其更容易、更快速、更便捷的开发 RESTful API。

REST API 通过 HTTP 请求进行通信,完成以下功能------创建、读取、更新和删除数据。它们也称为 CRUD 操作。REST 提供有关请求资源的信息,并使用四种方法来描述如何处理资源:

POST --- 创建资源;

GET --- 获取资源;

PUT --- 更新资源;

DELETE --- 删除资源。

flask-restful是flask模块的一个扩展,能够快速构建restful风格的api。对于其他的扩展也有很高的兼容性。

  • 资源类:Flask-RESTful 提供了一个 Resource 基类,可以用来创建资源。Resource 类包含了 HTTP 方法(GET、POST、PUT、DELETE 等)的处理逻辑,并提供了一些方便的方法来处理请求和响应。
  • 请求参数解析:Flask-RESTful 提供了一个 RequestParser 类,用于解析请求参数。RequestParser 可以自动将查询参数、表单参数、JSON 参数等解析成 Python 类型,并提供了一些选项来指定参数的类型、默认值、必须存在等限制条件。
  • 响应格式化:Flask-RESTful 提供了一个 marshal_with() 装饰器,用于格式化响应数据。marshal_with() 装饰器可以将 Python 对象转换成指定的输出格式(如 JSON、XML 等),并支持指定输出字段、字段类型、嵌套字段等功能。
  • 路由定义: Flask-RESTful 提供了一个 Api 类,用于定义路由和资源的映射关系。Api 类包含了 add_resource()方法,用于将资源类和 URL 路由绑定起来。
  • 异常处理:Flask-RESTful 提供了一些异常类,用于处理 HTTP 请求和响应中的错误。Flask-RESTful 的异常类包括 abort、HTTPException 等,可以方便地处理 HTTP 状态码、错误信息等。

安装flask_restful

bash 复制代码
pip3 install flask-restful

flask_restful 使用

Flask-RESTful 提供了一个 Resource 基础类,它能够定义一个给定 URL 的一个或者多个 HTTP 方法

bash 复制代码
from flask import Flask
from flask.ext.restful import Api, Resource

app = Flask(__name__)
api = Api(app)

class UserAPI(Resource):
    def get(self, id):
        pass

    def put(self, id):
        pass

    def delete(self, id):
        pass

api.add_resource(UserAPI, '/users/<int:id>', endpoint = 'user')

flask 使用@app.route 装饰器自定义路由

Flask 提供的 @app.route 装饰器来可以自定义路由,它是 Flask 中常用的方式。以下是使用 @app.route 装饰器实现自定义路由的示例:

python 复制代码
from flask import Flask

app = Flask(__name__)

# 路由类
@app.route('/myclassroute')
class MyRouter:
    def __init__(self):
        pass

    @app.route('/myroute')
    def my_route_handler(self):
        return 'This is my custom route!'

if __name__ == '__main__':
    app.run()

类装饰器 @app.route('/myclassroute') 中定义了类级别的路由。这将使整个类中的方法都与 /myclassroute 关联起来。

然后,在类中的方法上使用 @app.route('/myroute') 装饰器来定义方法级别的路由。这些方法级别的路由将与类级别的路由拼接起来,形成完整的路由路径。

在浏览器中访问 http://localhost:5000/myclassroute/myroute 时,将看到返回的文本 "This is my custom route!"。

全局响应配置

flask的自带的jsonify方法

使用flask写api是件很方便的事情, flask内部的jsonify方法可以轻松的返回json数据。

Flask是一个轻量级的Python Web框架,其设计目的是使得Web开发变得更加容易。Flask支持多种扩展库,Flask Jsonify是其中一个非常常用的扩展库。所谓的Jsonify,指的是将Python对象转换为Json对象。Flask Jsonify是Flask库中的一个函数,用来将Python数据结构转换为Json并返回到客户端。

jsonify返回的类型是 <class 'flask.wrappers.Response'>,一个JSON的响应(response)

jsonify 返回的Response中的几个属性:

  • headers : 设置请求头信息
  • status : String类型的数据,格式为这种:"200 ok"
  • status_code : int 类型,就是状态码,但是不能是自定义的状态码
  • data : 需要返回到前端的数据
  • set_cookie :设置cookie 的值
  • del_cookie :删除cookie ,不会立马删除浏览器上报错的cookie 值,会讲过期时间设置为当前时间,还是cookie 创建的时间,这样就表示过期了,浏览器会自动删除。

关键点: jsonify 返回的Response的headers属性为:Content-Type: application/json ,是标准的json格式。区别于josn.dumps(data)返回的Response的headers属性为:Content-Type: text/html; charset=utf-8,这就是要封装出jsonify方法的主要目的。

jsonify还有一个特性是:jsonify自动去除了JSON格式中逗号冒号间的空格,起到了压缩数据的作用。(实际上就是用了 json.dumps(data, separators=(',', ':')) 处理。)

Flask Jsonify的使用非常简单,我们只需要在Python代码中导入该扩展库,并且在需要返回Json结果的函数中使用该方法即可。下面是一个使用Flask Jsonify的示例代码:

python 复制代码
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/user_info')
def user_info():
    user = {
        'name': '小明',
        'age': 18,
        'gender': '男'
    }
    return jsonify(user)

if __name__ == '__main__':
    app.run()

我们定义了一个/user_info的路由,当用户访问该路由时,会返回一个Json格式的用户信息。其中,我们使用了Flask Jsonify函数将Python字典对象转换为了Json对象。

Flask Jsonify函数支持多种参数类型

  1. 字典类型的参数是使用最为广泛的一种情况,我们可以直接将一个Python字典对象传递给Flask Jsonify函数,该函数会将该字典对象转换为Json。
  2. 列表类型的参数
    列表类型的参数也可以被Flask Jsonify函数识别并转换为Json。我们可以将一个Python列表对象传递给Flask Jsonify函数,该函数会将该列表对象转换为Json。

jsonify函数使用的是Python内置的json模块进行序列化操作,因此需要确保序列化的对象是支持JSON序列化的类型.

JSONIFY_PRETTYPRINT_REGULAR

JSONIFY_PRETTYPRINT_REGULAR 是一个 Flask 应用程序配置选项,用于指定在返回 JSON 响应时是否进行美化打印。默认情况下,它的值为 True,表示启用美化打印。

你可以在 Flask 应用程序的配置中添加 'JSONIFY_PRETTYPRINT_REGULAR' 键,并设置其对应的值。以下是一个示例:

bash 复制代码
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False  # 禁用 JSON 响应的美化打印

确保在创建 Flask 应用程序对象之后、在使用 app.run() 启动应用程序之前,设置正确的配置值。

JSONIFY_MIMETYPE

'JSONIFY_MIMETYPE' 是 Flask 应用程序的配置选项之一,用于指定 JSON 响应的 MIME 类型。

你可以在 Flask 应用程序的配置中添加 'JSONIFY_MIMETYPE' 键,并设置其对应的值。以下是一个示例:

bash 复制代码
app.config['JSONIFY_MIMETYPE'] = 'application/json'

确保在创建 Flask 应用程序对象之前、在使用 app.run() 启动应用程序之前,设置正确的配置值。

重写jsonify方法

关于flask的jsonify序列化dict后的结果会自动根据key的下标升序排列,希望dict原样返回的方法【重写jsonify方法】

参考URL: https://dandelioncloud.cn/article/details/1443061478801911810/

相关推荐
大模型铲屎官39 分钟前
【Python-Day 14】玩转Python字典(上篇):从零开始学习创建、访问与操作
开发语言·人工智能·pytorch·python·深度学习·大模型·字典
yunvwugua__42 分钟前
Python训练营打卡 Day27
开发语言·python
Stara05112 小时前
基于多头自注意力机制(MHSA)增强的YOLOv11主干网络—面向高精度目标检测的结构创新与性能优化
人工智能·python·深度学习·神经网络·目标检测·计算机视觉·yolov11
那雨倾城3 小时前
使用 OpenCV 将图像中标记特定颜色区域
人工智能·python·opencv·计算机视觉·视觉检测
LuckyTHP5 小时前
java 使用zxing生成条形码(可自定义文字位置、边框样式)
java·开发语言·python
mahuifa7 小时前
(7)python开发经验
python·qt·pyside6·开发经验
学地理的小胖砸8 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
安迪小宝8 小时前
6 任务路由与负载均衡
运维·python·celery
Blossom.1188 小时前
使用Python实现简单的人工智能聊天机器人
开发语言·人工智能·python·低代码·数据挖掘·机器人·云计算
lisw058 小时前
Python高级进阶:Vim与Vi使用指南
python·vim·excel