• flask使用蓝图,创建副本


    随着flask的发展,flask框架越来越复杂,我们需要进行模块化处理,因为之前学过python模块化管理,我可以对一个flask程序进行简单的模块化处理。

    我们都有一个博客程序,由此可知博客的前端界面需要的路由:首页,列表页,详情页等页面,如果博主需要编辑博客,必需进入后台处理后台主页,编辑,创建,发布。

    因为有很多人都会使用博客,这样会使得在一个.py文件中写入很多路由,在往后的维护代码中会很麻烦,此时我们就需要模块化处理,有时.py文件中的app会直接报错,导致代码没办法写入,因此传统的模块化处理并不适合,我们需要flask程序提供一个特有的模块化处理方法,flask内置了一个模块化处理的类,即Blueprint(蓝图);

    蓝图(Blueprint)的概念

    Blueprint简单来说,它就是一个储存操作方法的容器,flask可以通过蓝图来组织URL以及处理请求。flask使用Blueprint让应用实现模块化。

    什么是蓝图

    用于实现单个应用的视图,模板,静态文件的集合。

    蓝图的运行机制

    蓝图是保存了一组将来可以在应用对象上执行的操作。注册路由就是一种操作,当在程序实例上调用route装饰器注册路由时,这个操作将修改对象的url_map路由映射列表。当我们在蓝图对象上调用route装饰器注册路由时,它只是在内部的一个延迟操作记录列表defered_functions中添加了一个项。当执行应用对象的 register_blueprint() 方法时,应用对象从蓝图对象的 defered_functions 列表中取出每一项,即调用应用对象的 add_url_rule() 方法,这将会修改程序实例的路由映射列表。

    在flask中,blueprint具有以下属性:

    1.一个应用可以具有多个blueprint;

    2.可以将一个blueprint注册到任意一个未使用的URL下比如“/”,“/sample”或子域名。

    3.在一个应用中,一个模块可以被注册多次。

    4。blueprint可以具有单独属于自己的模板,静态文件或者通过其他的通用操作方法,他并不是需要实现应用的试图和函数。

    5.在一个应用初始化时,就应该要注册需要的blueprint,但是一个blueprint并不是一个完整的应用,它不能独立与应用运行,而必须要注册到某一个应用中。

    蓝图对象用起来和flask差不多,最大的区别是蓝图对象没有办法独立运行,必须将他注册到一个应用对象上才能生效。

    使用蓝图可以分为三部分

    1.创建一个蓝图对象

    #Blueprint必须指定两个参数,admin表示蓝图的名称,__name__表示蓝图所在模块

    mypart = Blueprint('mypart',__name__)

    2. 在蓝图对象上注册一个路由

    @mypart.route("/part")
    def mindex():
    return "这里是部分功能"
    3.在应用对象上注册这个蓝图对象
    app.register_blueprint(mypart,url_prefix='/part')
    当应用启动时,可以通过‘/part’ 访问
     
     
    蓝图url前缀
    我们在应用对象上注册一个蓝图时,可以制定一个url_prefix关键字参数(默认是/),在蓝图上注册路由url时会自动加上这个前缀,目的是防止注册多个蓝图时,不会起冲突。
    只需要注册蓝图时加上不同的路径。
     
     
    应用对象注册蓝图
    # -*- encoding: utf-8 -*-
    #使用蓝图需要依来blueprint库
    from flask import Flask,Blueprint

    #导入自定义的蓝图文件
    from day6_part import mypart



    #创建对象
    app = Flask(__name__)

    #载入文件
    app.config.from_pyfile('config.ini')


    #注册定义好的蓝图文件,给蓝图的url加前缀
    app.register_blueprint(mypart,url_prefix='/part')



    @app.route('/')
    def index():
    return 'aa'

    if __name__ == "__main__":
    app.run()

    注册蓝图

    # -*- encoding: utf-8 -*-
    from flask import Flask,Blueprint

    #建立对象
    app = Flask(__name__)

    #载入配置文件
    app.config.from_pyfile('config.ini')

    #注册蓝图

    #Blueprint必须指定两个参数,admin表示蓝图的名称,__name__表示蓝图所在模块

    mypart = Blueprint('mypart',__name__)

    @mypart.route("/part")
    def mindex():
    return "这里是部分功能"


    @mypart.route("/test")
    def atest():
    return "这里是部分功能test"

    # @app.route("/")
    # def index():
    # return "这里是蓝图副功能"
    # if __name__ == "__main__":
    # app.run()

    蓝图的高阶使用,项目目录下建立两个文件夹 news和 login  在news文件夹中建立蓝图文件news.py,    login文件夹中建立  login.py  ,在单一入口中注册蓝图,通过网址/news和 /login调用

    Login。Py副

    # -*- encoding: utf-8 -*-

    #使用蓝图需要依赖于blueprint库

    from flask import Flask ,Blueprint

    #创建对象

    app = Flask(__name__)

    #载入文件

    app.config.from_pyfile('config.ini')

    #注册自定义的蓝宇文件,给蓝图的url加前缀

    loginn = Blueprint('loginn',__name__)

    @loginn.route('/')

    def index():

        return 'login'

    # if __name__ == "__main__":

    #     app.run()

    News.py副

    # -*- encoding: utf-8 -*-

    from flask import Flask,Blueprint

    #建立对象

    app = Flask(__name__)

    #载入文件

    app.config.from_pyfile('config.ini')

    #注册蓝图

    wws = Blueprint('wws',__name__)

    @wws.route('/')

    def index():

        return '这里是news'

    主蓝图

    # -*- encoding: utf-8 -*-

    from flask import Flask,Blueprint

    from news import  news

    from login import login

    app = Flask(__name__)

    app.register_blueprint(news.wws,url_prefix='/news')

    app.register_blueprint(login.loginn,url_prefix='/login')

    @app.route("/")

    def index():

        return "这是首页"

    if __name__ == "__main__":

       

        app.run()

  • 相关阅读:
    qt QTimer 计时器
    qt DateTime 计算时间
    c++ win32 关机 注销 重启
    uniapp 修改meta:viewport
    初次使用 VUX
    移动端web app自适应布局探索与总结
    前端js模版 预编译工具Tmod js使用入门
    谷歌 Uncaught SecurityError: Failed to execute 'replaceState' on 'History 错误
    H5 前端页面适配响应式
    微信video标签全屏无法退出bug 本文系转载
  • 原文地址:https://www.cnblogs.com/chengdongzi/p/10181152.html
Copyright © 2020-2023  润新知