烧瓶中的蓝图

时间:2018-08-30 21:29:41

标签: python python-3.x flask

我要接管一个具有用户模块但没有登录页面的Flask应用程序。该项目的结构为:

|-application.py
|-manage.py
|-settings.py
|-/templates
|----base.html
|----index.html
|----navbar.html
|----/user
|--------views.py

application.py:

from flask import Flask

....

def create_app(**config_overrides):
    app = Flask(__name__)
    app.config.from_pyfile('settings.py')

    app.config.update(config_overrides)

    db.init_app(app)

    from user.views import user_app
    app.register_blueprint(user_app)

    return app

user / views.py:

from flask import Blueprint, render_template, request, redirect, session, url_for, abort
...

user_app = Blueprint('user_app', __name__)

@user_app.route('login', methods = ('GET','POST'))
def login():
  ....

我将index.html放置在 templates 文件夹中。

我是否应该在根目录中放置view.py,以便在其中放置到index.html的路由?

1 个答案:

答案 0 :(得分:1)

您可以在任意位置添加其他路线。

但是,由于该程序包使用create_app()应用工厂,因此您无法使用@app.route()装饰器注册这些路由;该应用不是以您只能导入的方式创建的。

是的,创建一个views.py模块是一个很好的组织构想,但是也确实要在其中创建一个Blueprint(),并使用{{1}在create_app()函数中注册该蓝图。 }应用实例。

Flask()中:

views.py

并在from flask import Blueprint bp = Blueprint('main', __name__) @main.route('/') def index(): # produce a landing page 的{​​{1}}中添加

create_app()

(我习惯于对所有蓝图使用application.py变量名,然后仅导入模块并注册import views app.register_blueprint(views.bp) 属性。)

这是显式导入和bp调用,将module.bp项目中使用的任何蓝图与最终应用程序的路线联系起来。蓝图可以共享相同的前缀,包括没有前缀。

要注意的一件事:app.register_blueprint()模块现在是Flask旁边的顶级模块。最好将所有内容都移到 package 中,这样您可以更自由地使用自己的名字。单个程序包中的所有模块都具有命名空间,并与其他顶级模块(例如viewsapplication.pyjson分开,因此当您要使用项目中其他模块之一的名称相同。

您需要将time以外的所有内容移动到具有项目合适名称的子目录中,并将flask移至manage.py。然后,导入可以使用application.py从当前包中进行导入,等等。