zoukankan      html  css  js  c++  java
  • 十一、蓝图(Blueprint)

    1、蓝图(Blueprint)的作用

    1 from flask import Blueprint

      (1)帮助划分flask应用程序的目录结构

      我们最初学习的flask应用程序都是被写在一个.py文件中的,但是当我们的flask应用程序稍微大一点的时候(包含模板、静态文件等资源),就不太可能使用一个.py文件了,必须要划分目录结构了

    简单的目录结构:

     account.py

     1 from flask import Blueprint
     2 from flask import render_template
     3 
     4 
     5 ac = Blueprint("ac", __name__)
     6 
     7 
     8 @ac.route("/")
     9 def index():
    10     return "account, index"
    11 
    12 
    13 @ac.route("/login")
    14 def login():
    15     return render_template("login.html")

    flask_blueprint_pro/flask_blueprint_pro/__init__.py

    1 from flask import Flask
    2 from .views import account
    3 
    4 
    5 app = Flask(__name__)
    6 app.debug = True
    7 
    8 app.register_blueprint(account.ac)

    flask_blueprint_pro/manage.py

    1 from flask_blueprint_pro import app
    2 
    3 
    4 if __name__ == '__main__':
    5     app.run("localhost", 80)

    要注意的地方:

      在哪个文件里面创建Flask的实例对象,那么默认的static_folder和template_folder就默认为当前目录下的static和templates目录,当render_template渲染模板时,就在默认的template目录里面寻找,模板里的静态资源就会在static目录下寻找。

      flask_blueprint_pro/manage.py中的导入from flask_blueprint_pro import app的flask_blueprint_pro的前面不能加点,否则python解释器就会认为项目目录是一个包,就会导入失败,出现错误

      (2)给url加一个前缀(类似于django里面的主路由分发子路由功能)

    account.py

    from flask import Blueprint
    from flask import render_template
    
    
    ac = Blueprint("ac", __name__, url_prefix="/account")
    
    
    @ac.route("/")
    def index():
        return "account, index"
    
    
    @ac.route("/login")
    def login():
        return render_template("login.html")

    以后再访问account.py里面的路径时,必须要在前面加上"/account",实现了每个功能通过每个url前缀分隔开,这个不仅可以在实例化Blueprint时传入url_prefix参数,也可以在注册蓝图时传入url_prefix参数

    1 from flask import Flask
    2 from .views import account
    3 
    4 
    5 app = Flask(__name__)
    6 app.debug = True
    7 
    8 app.register_blueprint(account.ac, url_prefix="/account")

      (3)为每一个蓝图(Blueprint提供一个局部的before_request、after_request)before_requst和after_request是被Blueprint的实例化对象使用的,因而只对该蓝图起效

          为每一个蓝图提供一个局部的static_folder和template_folder,如果这两个参数被设置了,就会在这两个目录下寻找对应的文件,如果没有被设置或者没有寻找到,就会在全局的static_folder和template_folder目录下寻找,这个就会引出一个更加大型的项目目录结构(每个子应用管理自己的静态文件和模板文件),这样也方便协同开发,每个人完成自己的功能模块。

     big_flask_pro/big_flask_pro/__init__.py

    1 from flask import Flask
    2 
    3 
    4 app = Flask(__name__)
    5 from . import account
    6 from .account import views
    7 app.register_blueprint(account.ac)

    注意:为什么还要导入from .account import views,这不是显得多余吗?如果执行这句代码,将路由规则和视图函数对应起来的蓝图操作就不会执行,导致访问路径时,提示路径不存在。

    2、补充

      假如别人交给我们一个项目,到时没有告诉我们需要安装哪些依赖项,我们在将依赖项安装完成之前是启动不了项目,那有什么办法可以自动找出这个项目需要安装的依赖项,而不需要我们一个个去找吗?

      pipreqs工具可以帮助我们自动寻找项目依赖

      安装:

    pip install pipreqs

      使用:

    pipreqs ./

      执行pipreqs ./(./ 表示当前目录下的所有目录及文件),就会在当前目录下生成一个requestments.txt文件(pip freeze > requestments.txt),然后直接安装依赖项就可以了

    pip install -r requestments.txt
  • 相关阅读:
    软件下载链接获取方法
    【转】Linux 查看端口占用情况
    [转]SpringBoot第十集:国际化与Webjars的应用(2020最新最易懂)
    【转】Vue生命周期理解(带图的哦)
    Visual Studio 2019&WebStorm&CMD 创建vue项目
    Qt-Button使用QSS变图片按钮
    Qt-滚动条QSS样式
    Qt-鼠标点击别处隐藏widget
    OSG-修改osg鼠标中轮放大缩小的操作键
    OSG-在使用单位的kit编译osgQOpenGL时提示“语法错误:"unit"的前面应有“:””
  • 原文地址:https://www.cnblogs.com/loveprogramme/p/13400009.html
Copyright © 2011-2022 走看看