文章目录
- [快速上手Flask(二) flask-restful以及全局响应配置](#快速上手Flask(二) flask-restful以及全局响应配置)
-
- 什么是flask-restful
-
- 安装flask_restful
- [flask_restful 使用](#flask_restful 使用)
- [flask 使用@app.route 装饰器自定义路由](#flask 使用@app.route 装饰器自定义路由)
- 全局响应配置
快速上手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函数支持多种参数类型
- 字典类型的参数是使用最为广泛的一种情况,我们可以直接将一个Python字典对象传递给Flask Jsonify函数,该函数会将该字典对象转换为Json。
- 列表类型的参数
列表类型的参数也可以被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/