• flask内容学习之蓝图以及单元测试


    蓝图的概念:
    简单来说,蓝图是一个存储操作方法的容器。这些操作在这个蓝图被注册到一个应用之后就可以被调用。Flask可以通过蓝图来制止URL以及处理请求。
    Flask使用蓝图来让应用实现模块化,在Flask中,蓝图具有如下数次那个
    1,一个应用可以具有多个蓝图;
    2,可以敬一个蓝图注册到任何一个未使用的URL下比如"/","/example"下或者其子域名中;
    3,一个应用中,一个模块可以注册多次;
    4,蓝图可以具有自己的模板,竟然文件或者其他的通用的操作方法,它并不是必须要实现应用中的视图和函数;
    在一个应用初始化时,就应该要注册所需要使用的蓝图。
    但是一个蓝图并不是一个完整的应用,它不能独立于应用运行,而必须注册到某一个应用中才能运行。

    蓝图对象的用法:
    蓝图的对象的用法实际上和一个Flask随想差不多,而最大的区别在于一个蓝图没有对象没有办法独立的运行,必须要讲它注册在一个运用对象上才可以生效

    使用蓝图的可以分为三个步骤:
    1,创建一个蓝图对象:(在Flask中创建一个Python的包,在包的initpy文件中导入蓝图的,实例化出一个蓝图的对象);

    2,在这个蓝图的对象上进行操作,注册路由,指定静态文件夹,注册模板过滤器(Flask项目中建立static和temolates文件夹);
    3,在init的py文件中导入views函数中的视图函数,(from .views
    import *);

    4,在应用对象上注册这个蓝图的对象,在这个应用启动后,通过在定义的蓝图地址来访问蓝图中定义的视图函数。

     1 from flask import Blueprint
     2 
     3 blur_index = Blueprint("index", __name__,
     4                        url_prefix="/index",  # 指定路由地址
     5                        static_folder="static",  # 指定静态文件地址
     6                        template_folder="templates"  # 指定模板地址
     7                        )
     8 
     9 # 导入views中的内容必须在蓝图对象实例化之后
    10 from .views import *
    __init__.py文件夹
    1 from . import blur_index
    2 from flask import render_template
    3 
    4 
    5 @blur_index.route("/")
    6 def index():
    7     return render_template("index.html")
    views.py文件
     1 from flask import Flask
     2 from index import blur_index
     3 
     4 
     5 app = Flask(__name__)
     6 
     7 app.register_blueprint(blur_index)  # 注册蓝图
     8 
     9 
    10 if __name__ == '__main__':
    11     print(app.url_map)
    12     app.run(debug=True)
    注册蓝图到应用上


    蓝图的运行机制
    1,蓝图是保存了一组将来可以在对象上执行的操作,注册路由就是一种操作,
    2,当在应用对象上调用route装饰器注册路由时,这个操作将修改对象的url_map的路由表;
    3,然而,蓝图对对象根本没有路由表,当我们在蓝图对象上调用route装饰器注册路由时。它只是在内部的一个延迟操作记录列表defered_functions中添加了一个项
    4,当执行对此昂的register_blueprint()方法的,应用对象将从蓝图对此昂的defered_functions列表中取出每一项,并以吱声作为参数执行该匿名函数,即调用应用对此昂的add_url_rule()方法,这将真正的修改应用对象的路由表

  • 相关阅读:
    你不知道的JavaScript(上)作用域与闭包
    csu 1982: 小M的移动硬盘
    csu 1985: 驱R符
    csu 1987: 绚丽的手链
    2017ACM/ICPC广西邀请赛 1007 Duizi and Shunzi
    2017ACM/ICPC广西邀请赛 1005 CS Course
    2017ACM/ICPC广西邀请赛 1004 Covering
    hdu 1209 Clock
    trac中wiki直接显示任务代码
    phpcms中action值的含义
  • 原文地址:https://www.cnblogs.com/cerofang/p/9218731.html
Copyright © 2020-2023  润新知