zoukankan      html  css  js  c++  java
  • 预处理函数在app和蓝图级别的不同使用

    app级别

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy
    # SQLAlchemy 类实例对象的创建一定要在引用蓝图之前,因为db会在各个蓝图中调用进行数据库操作
    db = SQLAlchemy()
    from sansa.views.account import account
    from flask_script import Manager
    from flask_migrate import Migrate,MigrateCommand
    
    
    def create_app():
        """
        创建app
        :return:
        """
        app = Flask(__name__)
        app.config.from_object("settings.Development")
        # 注册到当前app下的蓝图都要执行预处理函数b1
        """
            解释:
                普通方式写预处理函数形式:
                    @app对象/蓝图对象.before_request
                    def xxx():
                        pass
                    
                    @app对象/蓝图对象.before_request 执行的本质就是:
                    pp对象/蓝图对象.before_request(xxx),即加括号执行  pp对象/蓝图对象.before_request 函数,并将装饰器下方函数的内存地址作为参数传入,
                    内部将传入的被装饰函数的内存地址添加至 预处理函数列表中。请求到来之后,执行上下文流程,在执行视图函数之前循环预处理函数列表并执行
                    每一个预处理函数。
                    通过上面的分析我们还可以发现,app调用了before_request就会将被装饰函数添加至app的预处理函数中,蓝图对象调用了before_request就会将
                    被装饰函数添加至视图的预处理函数中 
        """
        app.before_request(b1)
        # 初始化db,读取app中关于数据库连接的配置信息,一定要放在导入配置之后
        db.init_app(app)
        app.register_blueprint(account)
        # 创建项目管理器
        manager = Manager(app)
        # 创建数据库迁移管理实例
        migrate = Migrate(app,db)
        # 为管理器添加一个db的命令
        manager.add_command("db",MigrateCommand)
        return manager
    
    
    def b1():
        print("app级别的预处理函数")

    蓝图级别

    from flask import Blueprint
    from sansa import db
    from sansa.models import Users
    account = Blueprint("account",__name__)
    
    @account.before_request
    def b2():
        print("我是蓝图级别的预处理函数")
    
    
    @account.route('/login',methods=["GET"])
    def login():
        db.session.add(Users(name='王超'))
        db.session.commit()
        # 释放当前会话的连接
        db.session.remove()
        return "Login"
  • 相关阅读:
    一文掌握Docker Compose
    Flannel配置详解
    Helm二:安装
    Helm一:简介
    ubuntu内核及系统升级
    Ogre 编辑器一(MyGUI+Ogre整合与主界面)
    MyGUI 解析
    Ogre 监听类与渲染流程
    OpenGL 阴影之Shadow Mapping和Shadow Volumes
    Ogre RTSS组件解析
  • 原文地址:https://www.cnblogs.com/liuyinzhou/p/9781313.html
Copyright © 2011-2022 走看看