Flask 学习-43.Flask-RESTX 路由注册的2种方式

前言

flask 注册路由有2种方式,一种是通过@app.route()装饰器来实现,另外一种是通过app.add_url_rule()方法来实现路由注册

路由的注册

在没有使用 Flask-RESTX 框架之前,我们学的第一个hello world 程序是通过@app.route()装饰器来注册的路由

from flask import Flask

app = Flask(__name__)


@app.route("/hello")
def hello_world():
    return {'hello': 'world'}

也可以通过 ​​add_url_rule() 方法​​​ 来完成路由注册 ​​@app.route('/hello')​​​ 的本质就是调用 ​​add_url_rule()​​ 方法。

from flask import Flask

app = Flask(__name__)


def hello():
    # 另一种 基于类的视图(也叫即插视图)
    return {'hello': 'world'}


app.add_url_rule('/hello', view_func=hello)

可插拔视图,基于类的视图

from flask.views import View, MethodView
from flask import Flask

app = Flask(__name__)

class MyView(MethodView):

    def get(self):
        return {"code": 0, "msg": "get 请求"}

    def post(self):
        return {"code": 0, "msg": "post 请求"}


# 注册,用as_view方法
app.add_url_rule("/my", view_func=MyView.as_view("myview"))

采用基于类的视图,只能通过 ​​add_url_rule​​() 来注册路由。

Flask-RESTX 中路由注册

Flask-RESTX 提供的主要构建块是资源。资源建立在Flask 可插拔视图之上,我们写的都是基于类的视图,支持2种注册方式

  • @api.route('/hello') 装饰器注册,注意这里是api 不是app了
  • api.add_resource(HelloWorld, '/hello') 通过add_resource 方法注册

@api.route('/hello') 装饰器使用示例

from flask.views import View, MethodView
from flask import Flask

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


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


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

另一种 add_resource() 方法注册

from flask.views import View, MethodView
from flask import Flask

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


class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world2'}


api.add_resource(HelloWorld, '/hello2')

Endpoints

在一个 API 中,同一个资源会有多个 URL

api.add_resource(HelloWorld, '/hello', '/world')

或者

@api.route('/hello', '/world')
class HelloWorld(Resource):
    pass

那么我们访问http://127.0.0.1:5000/hello 和 访问 http://127.0.0.1:5000/world2个地址得到的结果是一样的

设置 endpoint 参数

api.add_resource(Todo, '/todo/<int:todo_id>', endpoint='todo_ep')

# or

@api.route('/todo/<int:todo_id>', endpoint='todo_ep')
class HelloWorld(Resource):
    pass

url_for() 函数和 endpoint 使用参考前面教程https://www.cnblogs.com/yoyoketang/p/16631105.html

posted @   上海-悠悠  阅读(454)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-09-04 python测试开发django-114.ModelForm中局部钩子(clean_)和全局钩子校验
2020-09-04 pytest文档51-内置fixture之cache使用
2017-09-04 selenium+python在mac环境上的搭建
点击右上角即可分享
微信分享提示