打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Flask后端实践 连载十二 Flask优雅的注册蓝图及自定义MethodView

tips:

  • 介绍如何有效的统一注册蓝图及自定义MethodView
  • 本文基于python3编写
  • 代码仓库

目的

在项目开发中,通常采用工程模式来创建app,如果注册接口写在工厂函数中,不仅不好管理,而且代码也看起来很臃肿。并且项目中会有很多模块,每个模块又有不同的功能,由此分割出来的接口也非常多。所有需要有统一的地方来管理接口及相关模块。

解决方法

  1. 编写蓝图(user.py)

    from flask import Blueprintbp = Blueprint("test", __name__, url_prefix='/')@bp.route('/testBP', methods=["GET"])def test_bp():    return "蓝图测试"
  2. 编写自定义MethodView(auth.py)

    from flask.views import MethodViewclass AuthMethodView(MethodView):    # 指定需要启用的请求方法    __methods__ = ["GET", "POST", "PUT"]    def get(self):        return "测试自定义MethodView"    def post(self):        return "测试自定义MethodView"    def put(self):        return "测试自定义MethodView"    def delete(self):        return "测试自定义MethodView"    
  3. 统一管理蓝图和自定义MethodView(router.py)

    from user import bp as user_bpfrom auth import AuthMethodViewrouter = [    user_bp, # 用户蓝图接口    AuthMethodView, # 权限自定义MethodView]
  4. 统一注册蓝图和自定义MethodView(app.py)

    from flask import Flask, Blueprintfrom router import routerdef create_app():    """    工厂模式创建APP    """    app = Flask(__name__)    # 注册接口    register_api(app, router)    return appdef register_api(app, routers):    """    注册蓝图和自定义MethodView    """    for router in routers:        if isinstance(router, Blueprint):            app.register_blueprint(router)        else:            try:                endpoint = router.__name__                view_func = router.as_view(endpoint)                # url默认为类名小写                url = '/{}/'.format(router.__name__.lower())                if 'GET' in router.__methods__:                    app.add_url_rule(url, defaults={'key': None}, view_func=view_func, methods=['GET', ])                    app.add_url_rule('{}<string:key>'.format(url), view_func=view_func, methods=['GET', ])                if 'POST' in router.__methods__:                    app.add_url_rule(url, view_func=view_func, methods=['POST', ])                if 'PUT' in router.__methods__:                    app.add_url_rule('{}<string:key>'.format(url), view_func=view_func, methods=['PUT', ])                if 'DELETE' in router.__methods__:                    app.add_url_rule('{}<string:key>'.format(url), view_func=view_func, methods=['DELETE', ])            except Exception as e:                raise ValueError(e)if __name__ == '__main__':    app = create_app()    app.run()
  5. 测试,启动app

  • 浏览器访问http://127.0.0.1:5000/testBP,页面返回蓝图测试

  • 浏览器访问http://127.0.0.1:5000/authmethodview/ ,页面返回测试自定义MethodView

总结

  • 统一管理了蓝图和自定义的MethodView,并减少了代码的冗余,保持代码的整洁性。
  • 下一篇将介绍使用flask输出excel报表
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
flask深度研究之蓝图和配置加载
盘点Python网页开发轻量级框架Flask知识(下篇)
Flask是Python web最火热三大框架之一!给我两小时带你完全入门
蓝图(Blueprint)详解
Python基础教程:Flask进击篇——Flask运行流程
框架-flaskの开发
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服