• python框架之Flask(3)-Blueprint(蓝图)


    蓝图

    用途

    给开发者提供清晰的目录结构。

    使用

    • 目录结构

      1、创建项目。

      2、在项目目录下创建与项目名同名文件夹。

      3、在 test_prj 文件夹下创建 __init__.py 文件,并在其中实例化 Flask 并返回。

      from flask import Flask
      
      
      def create_app():
          app = Flask(__name__)
          return app
      /test_prj/__init__.py

      3、在项目目录下创建 manage.py 文件作为入口,导入 Flask 实例并使用

      from test_prj import create_app
      
      app = create_app()
      
      if __name__ == '__main__':
          app.run()
      /manage.py

      4、在项目同名文件夹下创建 views 文件夹用来存放视图文件。

    • 引入蓝图

      5、在 views 文件夹下编写视图相关代码。比如新建一个用户逻辑相关视图,并引入蓝图。

      # 引入蓝图
      from flask import Blueprint
      
      # 实例化
      usr = Blueprint('usr', __name__)
      
      
      # 编写视图函数
      @usr.route('/login')
      def login():
          return 'login'
      
      
      @usr.route('/logout')
      def logout():
          return 'logout'
      /test_prj/views/user.py

      6、在 /test_prj/__init__.py 中给 Flask 实例注册蓝图。

      from flask import Flask
      from .views.user import usr
      
      
      def create_app():
          app = Flask(__name__)
          app.register_blueprint(usr)
          return app
      /test.prj/__init__.py

      7、接下来就可以正常运行访问了。

    • 模板使用

      8、在项目同名文件夹下创建 templates 目录。

      9、在 templates 目录下新建登录模板,修改视图。

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>login</title>
      </head>
      <body>
      <h2>登录</h2>
      </body>
      </html>
      /test_prj/templates/login.html
      # 引入蓝图
      from flask import Blueprint,render_template
      
      # 实例化
      usr = Blueprint('usr', __name__)
      
      
      # 编写视图函数
      @usr.route('/login')
      def login():
          return render_template('login.html')
      
      
      @usr.route('/logout')
      def logout():
          return 'logout'
      /test_prj/views/user.py

    补充

    前缀

    可以在注册蓝图时通过 url_prefix 属性加上访问该蓝图时的前缀。

    app.register_blueprint(admin, url_prefix='/admin')

    蓝图装饰器

    可以让装饰器只对指定蓝图生效,例如:

    from flask import Blueprint, render_template
    
    usr = Blueprint('usr', __name__)
    
    
    @usr.before_request
    def before_request_func():
        print('from before_request_func')

    指定静态&模板目录

    from flask import Blueprint
    
    web = Blueprint(
        'web',
        __name__,
        template_folder='templates',
        static_folder='static'
    )

    我测试时好像只对下面的大蓝图适用。

    大蓝图

    这里说的大蓝图就是对目录结构再更细粒度的划分了,附上示例地址

    https://github.com/zze326/flask_blueprint_pro.git
  • 相关阅读:
    Head of a Gang
    如何实现可以获取最小值的栈?
    多项式函数的极值点与拐点判别及个数公式
    解决Windows10下小娜无法搜索本地应用的问题
    Oracle中常用的语句
    [HTML]在页面中输出空格的几种方式
    [JavaScript]JS中的变量声明与有效域
    JAVA中时间格式转换
    Context initialization failed org.springframework.beans.factory.BeanCreationException
    Spring整合Mybatis SQL语句的输出
  • 原文地址:https://www.cnblogs.com/zze46/p/10123122.html
Copyright © 2020-2023  润新知