2

使用 Flask 时,是否必须将所有方法定义放在一个文件中,因为我试图将一些方法定义移动到另一个文件中但 404 未找到错误。

4

3 回答 3

4

您不必在一个文件中定义所有内容。这在更大的应用程序中会非常糟糕:) 阅读官方简短文档并在那里查看建议(其中包括先前答案中提到的蓝图,这是组织大型应用程序的好方法)。

还有一个很好的示例应用程序关于如何组织和创建更大的应用程序。也可能有帮助;)

其他非 Flask 特定的方法、类和所有内容都只是简单的 Python,因此也无需将它们放在一个文件中。

于 2012-12-23T08:36:52.217 回答
1

只要该文件具有对Flask您创建的对象的引用,您就可以将声明移动到其他文件中,但是如果您的应用程序变得足够大以保证您可能应该开始研究Flask 蓝图

于 2012-12-22T21:06:20.270 回答
0

正如 Flask 中所建议的,您可以使用 Blueprint 来完成更大的应用程序。我喜欢创建彼此不太耦合的模块化应用程序的方法。因此,您制作的蓝图大部分都具有应用程序功能,例如路由或 before_request。

simple_page = Blueprint('simple',__name__,template_folder='templates')
@simple_page.route('/', defaults={'page': 'index'})
@simple_page.route('/<page>')
def show(page):
    try:
        return render_template('pages/%s.html' % page)
    except TemplateNotFound:
        abort(404)

然后你注册它:

app = Flask(__name__)
app.register_blueprint(simple_page)

一些关于蓝图的信息:

  • 蓝图不是应用程序,不要指望它们会这样。
  • 蓝图可以定义它们自己的模板文件夹,这很有用,您可以通过每个蓝图的文件夹模块来指定模板并为您的应用程序排序。
  • 您应该始终记住附加一个“。” 尝试获取资源时:

    url_for('.index') #对于烧瓶应用

    url_for('.index') #用于蓝图

  • 在撰写此答案时,蓝图是 Flask 中相当新的解决方案,是多个文件夹中模块化应用程序的最佳解决方案,并且在所有应用程序中共享相同的 Flask 对象。

于 2013-02-28T17:18:25.070 回答