Flask 学习-42.Flask-RESTX 快速入门

2022-09-08 12:48:40 浏览数 (1)

前言

Flask-restfull 是flask 框架开发接口的一个框架,Flask-RESTPlus 是Flask-restfull 升级版,可以生成swagger 在线文档了。 但是 Flask-RESTPlus 这个项目不再维护了,迁移到 Flask-RESTX 了。Flask-RESTX 与 Flask-RESTPlus 的 API 保持 100% 兼容。

环境安装

Flask-RESTX 目前最新版本0.5.1 (但是不支持最新的flask 2.2.2版本) 以下是可以用的匹配版本

代码语言:javascript复制
Flask==2.0.1
flask-restx==0.5.1
Werkzeug==2.0.1

Flask-RESTX 官方地址https://flask-restx.readthedocs.io/en/latest/quickstart.html

初始化

与其他所有扩展一样,您可以使用应用程序对象对其进行初始化:

代码语言:javascript复制
from flask import Flask
from flask_restx import Api

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

或者使用工厂模式:

代码语言:javascript复制
from flask import Flask
from flask_restx import Api

api = Api()

app = Flask(__name__)
api.init_app(app)

一个简单的hello world

一个最小的 Flask-RESTX API 如下所示:

代码语言:javascript复制
from flask import Flask
from flask_restx import Resource, Api

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

@api.route('/hello')
class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

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

启动服务后访问http://127.0.0.1:5000/hello

资源丰富的路由

Flask-RESTX 提供的主要构建块是资源。资源建立在Flask 可插拔视图之上,让您只需在资源上定义方法即可轻松访问多种 HTTP 方法。 应用程序的基本 CRUD 资源如下所示:

代码语言:javascript复制
from flask import Flask, request
from flask_restx import Resource, Api

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

todos = {}

@api.route('/<string:todo_id>')
class TodoSimple(Resource):
    def get(self, todo_id):
        return {todo_id: todos[todo_id]}

    def put(self, todo_id):
        todos[todo_id] = request.form['data']
        return {todo_id: todos[todo_id]}

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

可以使用curl 测试上面接口,当然也可以用其它工具

代码语言:javascript复制
$ curl http://localhost:5000/todo1 -d "data=Remember the milk" -X PUT
{"todo1": "Remember the milk"}
$ curl http://localhost:5000/todo1
{"todo1": "Remember the milk"}
$ curl http://localhost:5000/todo2 -d "data=Change my brakepads" -X PUT
{"todo2": "Change my brakepads"}
$ curl http://localhost:5000/todo2
{"todo2": "Change my brakepads"}

Flask-RESTX 可以理解来自视图方法的多种返回值。与 Flask 类似,您可以返回任何可迭代对象并将其转换为响应,包括原始 Flask 响应对象。 Flask-RESTX 还支持使用多个返回值设置响应代码和响应头,如下所示:

代码语言:javascript复制
class Todo1(Resource):
    def get(self):
        # Default to 200 OK
        return {'task': 'Hello world'}

class Todo2(Resource):
    def get(self):
        # Set the response code to 201
        return {'task': 'Hello world'}, 201

class Todo3(Resource):
    def get(self):
        # Set the response code to 201 and return custom headers
        return {'task': 'Hello world'}, 201, {'Etag': 'some-opaque-string'}

2022年第 12期《python接口web自动化 测试开发》课程,9月17号开学!

本期上课时间:2022年9月17号 - 2022年12月17号,周六周日上午9:00-11:00

报名费:报名费3000一人(周期3个月)

联系微信/QQ:283340479

0 人点赞