flask蓝图的简单介绍

flask蓝图的简单介绍

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

下面是我demo结构:
图片描述flask

为何要使用蓝图?

  • 把一个应用分解为一个蓝图的集合。这对大型应用是理想的。一个项目能够实例化一个应用对象,初始化几个扩展,并注册一集合的蓝图。
  • 以 URL 前缀和/或子域名,在应用上注册一个蓝图。 URL 前缀/子域名中的参数即成为这个蓝图下的全部视图函数的共同的视图参数(默认状况下)。
  • 在一个应用中用不一样的 URL 规则屡次注册一个蓝图。
  • 经过蓝图提供模板过滤器、静态文件、模板和其它功能。一个蓝图不必定要实现应用或者视图函数。
  • 初始化一个 Flask 扩展时,在这些状况中注册一个蓝图。 引用自官方文档

在我看来,有了蓝图能够将一个应用注册成不少模块,方便管理,和添加扩展。app

个人第一个蓝图

导入相应的模块,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"

当时这样你并不能访问网页,由于你尚未注册蓝图,蓝图不是即插即用的url

注册蓝图

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

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 的形式。debug

构造URL

要想从一个页面跳转到另外一个页面,一般是redirect和url_for配合使用,因为咱们加入了蓝图,在访问时
咱们能够更加轻松code

url_for('blog.index')

具体代码以下:htm

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的页面中。对象

以上大部份内容都借鉴自官方文档,若是有不明白的地方,能够自行查阅。

相关文章
相关标签/搜索