Python 烧瓶中的蓝图
我正在接管一个Flask应用程序,它有一个用户模块,但没有登录页。该项目的结构如下: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
|-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应用程序是顶级模块而不是软件包,这是我的错误。但你真的希望它是一个包裹。我会更新的。