资讯专栏INFORMATION COLUMN

flask蓝图的简单介绍

shadajin / 3068人阅读

摘要:蓝图的简单介绍蓝图概念的简单介绍用蓝图的概念来在一个应用中或跨应用制作应用组件和支持通的模式。以前缀和或子域名,在应用上注册一个蓝图。前缀子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数默认情况下。

flask蓝图的简单介绍

蓝图概念的简单介绍:
Flask 用 蓝图(blueprints) 的概念来在一个应用中或跨应用制作应用组件和支持通的模式。蓝图很好地简化了大型应用工作的方式,并提供给 Flask 扩展在应用上注册操作的核心方法。一个 Blueprint 对象与 Flask 应用对象的工作方式很像,但它确实不是一个应用,而是一个描述如何构建或扩展应用的 蓝图 。

下面是我demo结构:

为什么要使用蓝图?

把一个应用分解为一个蓝图的集合。这对大型应用是理想的。一个项目可以实例化一个应用对象,初始化几个扩展,并注册一集合的蓝图。

以 URL 前缀和/或子域名,在应用上注册一个蓝图。 URL 前缀/子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数(默认情况下)。

在一个应用中用不同的 URL 规则多次注册一个蓝图。

通过蓝图提供模板过滤器、静态文件、模板和其它功能。一个蓝图不一定要实现应用或者视图函数。

初始化一个 Flask 扩展时,在这些情况中注册一个蓝图。 引用自官方文档

在我看来,有了蓝图可以将一个应用注册成很多模块,方便管理,和添加扩展。

我的第一个蓝图

导入相应的模块,Blueprint中的三个参数,第一个可以自己随意命令,第二个一般都是__name__,
他指定了当前的flask应用,也就是当前我的app文件夹(也是一个包),第三个参数指定你存放,模板文
件的位置,这个主要看你你应用的目录结构,我喜欢只存放一个templates目录在app文件夹下,然后
使用相对路径。

    from flask import Blueprint, render_template, abort, redirect, url_for
    from jinja2 import TemplateNotFound

    blog = Blueprint("blog", __name__, template_folder="../templates")
    @blog.route("/index")
    def index():
        try:
            return render_template("blog.html")
            except TemplateNotFound:
            abort(404)
    @blog.route("/welcome")
    def welcome():
            return "welcome to blog"
        

当时这样你并不能访问网页,因为你还没有注册蓝图,蓝图不是即插即用的

注册蓝图

在注册前一定要导入相应的蓝图,如代码中的admin和blog。

    from flask import Flask
    from view.addmin import admin
    from view.blog import blog
    app = Flask(__name__)
    app.register_blueprint(blog, url_prefix="/blog")
    app.register_blueprint(admin, url_prefix="/admin")

    if __name__ == "__main__":
        app.run(debug=True)
        # from werkzeug.serving import run_simple
        # run_simple("localhost", 5000, app)

访问相应的页面时,一定要将url_prefix中的前缀加上,比如要访问blog.html中的内容,要写成http://localhost/blog/index 的形式。

构造URL

要想从一个页面跳转到另一个页面,通常是redirect和url_for配合使用,由于我们加入了蓝图,在访问时
我们可以更加轻松

    url_for("blog.index")

具体代码如下:

    from flask import Blueprint, render_template, abort, redirect, url_for
    from jinja2 import TemplateNotFoun

    blog = Blueprint("blog", __name__, template_folder="../templates")
    @blog.route("/index")
    def index():
        try:
            return redirect(url_for("blog.welcome"))
        except TemplateNotFound:
            abort(404)
    @blog.route("/welcome")
    def welcome():
        return "welcome to blog"
        

当你访问/blog/index的页面时,会自动帮你跳转到/blog/welcome的页面中。

以上大部分内容都借鉴自官方文档,如果有不明白的地方,可以自行查阅。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40918.html

相关文章

  • 第一本 gitbook: Flask Web 开发笔记

    摘要:月份发布了第版,收到不少网友的良好建议,所以又抽空进行了完善,当然也拖了不少时间。本书主要介绍的基本使用,这也是我一开始在学习过程中经常用到的。第章实战,介绍了如何开发一个简单的应用。声明本书由编写,采用协议发布。 showImg(https://segmentfault.com/img/remote/1460000007484050?w=200&h=152); 书籍地址 head-f...

    KevinYan 评论0 收藏0
  • Flask Api 文档管理与 Swagger 上手

    摘要:众数周知,文档的编写和整理工作将花费巨大精力甚至不亚于代码的编写,因此在时间紧任务重的情况下,文档是首先被忽略的工作。是一款非常流行的文档管理交互工具,适用于在团队中的管理,以及服务组件对接。而我们目前需要的是获取文档或文件。 本文最先发布在博客:https://blog.ihypo.net/152551... Flask 是一个以自由度高、灵活性强著称的 Python Web 框架...

    Scholer 评论0 收藏0
  • Flask Web Development —— 大型应用程序结构(上)

    摘要:被定义在包的构造函数中的应用程序工厂函数会在示例中展示。这个构造函数导入大部分当前需要使用的扩展,但因为没有应用程序实例初始化它们,它可以被创建但不初始化通过不传递参数给它们的构造函数。而应用程序范围内的错误处理则必须使用。 虽然小型web应用程序用单个脚本可以很方便,但这种方法却不能很好地扩展。随着应用变得复杂,在单个大的源文件中处理会变得问题重重。 与大多数其他web框架不同,Fl...

    chemzqm 评论0 收藏0
  • 关于flask蓝图

    摘要:注册静态路由和应用对象不同,蓝图对象创建时不会默认注册静态目录的路由。 首选:flask蓝图是什么? flask运行web程序的运行是通过实例化对象app.run()来运行的,那么会出现在一个.py文件里面定义很多的视图函数,即不方便代码管理,又不利于后期的维护.所以在flask出现了蓝图(Blueprint),可以使程序模块化,就像django的一个个模块一样来独立编程。那么这个蓝图...

    Lsnsh 评论0 收藏0
  • python 最快 web 框架 Sanci 快速入门

    摘要:详细信息可以看下这个问题先在说下我的部署方式使用部署配置文件启动方式总结试用了下,把之前的一个聊天机器人从改成了。预告下一篇将介绍如何使用一步一步创建一个聊天机器人。 简介 Sanic 是一个和类Flask 的基于Python3.5+的web框架,它编写的代码速度特别快。除了像Flask 以外,Sanic 还支持以异步请求的方式处理请求。这意味着你可以使用新的 async/await ...

    snifes 评论0 收藏0

发表评论

0条评论

shadajin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<