Python 烧瓶中的蓝图

Python 烧瓶中的蓝图,python,python-3.x,flask,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_ov

我正在接管一个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的路由

您可以在任何地方添加其他路线

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

是的,创建一个
views.py
模块是一个很好的组织方法,但是也要在那里创建一个
Blueprint()
,并使用
Flask()
app实例在
create\u app()
函数中注册该蓝图

视图.py中

from flask import Blueprint

bp = Blueprint('main', __name__)

@main.route('/')
def index():
    # produce a landing page
create_app()
application.py
中添加

import views
app.register_blueprint(views.bp)
(我对所有蓝图使用
bp
变量名,然后只导入模块并注册
module.bp
属性)

是显式导入和
app.register\u blueprint()
调用将
Flask
项目中使用的任何蓝图绑定到最终应用程序的路径中。蓝图可以共享相同的前缀,包括没有前缀

需要注意的是:
视图
模块现在是
应用程序.py
旁边的顶级模块。最好把所有东西都放进一个包里,让你在使用什么名字上有更多的自由。单个包中的所有模块都有名称空间,与其他顶级模块(如
json
time
flask
)分开,因此当您希望为项目中的其他模块之一使用相同名称时,不会发生冲突


除了
manage.py
之外,您可以将所有内容移动到一个子目录中,并使用与项目相应的名称,然后将
application.py
移动到
\uuuuu init\uuuuuu.py
。然后,导入可以使用来自的
。导入…
从当前包导入,等等。

谢谢,因此views.py在根目录中,但是,当“manage.py runserver”时,我遇到以下错误:回溯(最近一次调用):文件“manage.py”,第7行,在app=create_app()文件/var/www/my_app/web/application.py,第19行,在创建应用程序中。导入视图导入错误:尝试在没有已知父级的情况下进行相对导入package@FeyziBagirov:是的,我没有注意到你的flask应用程序是顶级模块而不是软件包,这是我的错误。但你真的希望它是一个包裹。我会更新的。