zoukankan      html  css  js  c++  java
  • 第六章 Flask——蓝图(BluePrint)对象

    第六章 Flask——蓝图(BluePrint)对象

    一、初识蓝图(BluePrint)

    二、蓝图(BluePrint)详解

    一、初识蓝图(BluePrint)

    什么是蓝图(what):

    蓝图就是另一种形式(不可以被执行的)的Flask实例,它的作用就是将功能与主服务分开。

    为什么使用蓝图(why):

    比如说,你有一个客户管理系统,最开始的时候,只有一个查看客户列表的功能,后来你又加入了一个添加客户的功能(add_user)模块, 然后又加入了一个删除客户的功能(del_user)模块,然后又加入了一个修改客户的功能(up_user)模块,在这个系统中,就可以将查看客户,修改客户,添加客户,删除客户的四个功能做成蓝图加入到客户管理系统中。

    如何使用蓝图(how):

    1.创建一个项目然后将目录结构做成

    2.创建一个蓝图文件detail.py

    from flask import Blueprint # 导入 Flask 中的蓝图 Blueprint 模块
    
    detail_blueprint = Blueprint("serv",__name__) # 实例化一个蓝图(Blueprint)对象
    
    @detail_blueprint.route("/add_user",methods=["POST","GET"]) # 这里添加路由和视图函数的时候与在Flask对象中添加是一样的
    def add_user():
        return "添加用户"

    3.在flask_app.py里注册蓝图文件

    from flask import Flask,render_template
    from serv import detail # 导入此前写好的蓝图模块
    app = Flask(__name__,template_folder="templates")
    
    app.debug = True
    
    app.register_blueprint(detail.detail_blueprint) # 在Flask对象中注册蓝图模块中的蓝图对象
    
    
    @app.route("/info", methods=["GET", "POST"])
    def student_info(request):
        stu_id = int(request.args["id"])
        return f"Hello {stu_id}"  # Python3.6的新特性 f"{变量名}"
    
    
    if __name__ == '__main__':
        app.run() # 现在Flask对象中并没有写任何的路由和视图函数

     开启服务,然后访问 http://127.0.0.1:5000/add_user 查看结果

    二、蓝图(BluePrint)详解

    其实我们可以理解成一个没有run方法的Flask对象,这个理论虽然有很多的漏洞,但是对于刚接触蓝图的你来说,就这么样理解,没有错

    下面来看一下,在实例化蓝图的时候可以传递的参数都有什么,你就能完全理解了。

    flask的蓝图就好像django的app

    主视图flask_app.py

    from flask import Flask,render_template
    from serv import detail # 导入此前写好的蓝图模块
    app = Flask(__name__)
    
    app.debug = True
    
    app.register_blueprint(detail.detail_blueprint) # 在Flask对象中注册蓝图模块中的蓝图对象
    
    
    @app.route("/info", methods=["GET", "POST"])
    def student_info(request):
        stu_id = int(request.args["id"])
        return f"Hello {stu_id}"  # Python3.6的新特性 f"{变量名}"
    
    
    if __name__ == '__main__':
        app.run() # 现在Flask对象中并没有写任何的路由和视图函数

    蓝图detail.py

    from flask import Blueprint,render_template # 导入 Flask 中的蓝图 Blueprint 模块
    
    detail_blueprint = Blueprint("serv",__name__,
                                 template_folder="serv_temp",
                                 static_folder="serv_static",
                                 static_url_path="/serv_static"
                                 ) # 实例化一个蓝图(Blueprint)对象
    
    @detail_blueprint.route("/add_user",methods=["POST","GET"]) # 这里添加路由和视图函数的时候与在Flask对象中添加是一样的
    def add_user():
        return render_template("add_user.html")

    add_user.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>添加用户</title>
    </head>
    <body>
        <h1>add_user</h1>
        <img src="/serv_static/timg.jpg">
    </body>
    </html>

    效果如下

    从这个例子中我们总结出:

    Blueprint 其实可以理解为一个了没有run方法的 Flask 对象

    只要Blueprint被 Flask 注册了,就一定会生效

    !!!切记:蓝图内部的视图函数及route不要出现重复,!!!

  • 相关阅读:
    Python多线程爬虫爬取电影天堂资源
    BGP协议初探
    dubbo序列化hibernate.LazyInitializationException could not initialize proxy
    Spring Boot打包war jar 部署tomcat
    HSSFClientAnchor 参数说明
    attempt to create delete event with null entity
    解决BUG:CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
    Android Studio :enable vt-x in your bios security,已经打开还是报错的解决方法
    visual studio 2015 开发android
    ASP.NET用QQ,网易发送邮件以及添加附件
  • 原文地址:https://www.cnblogs.com/neymargoal/p/9918214.html
Copyright © 2011-2022 走看看