2012-12-22 61 views
2

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

回答

1

你可以,如果您的应用程序获得足够大,以保证只要该文件已为您创建的Flask对象的引用,但是移动声明到其他文件,你或许应该开始考虑Flask Blueprints

4

你不必在一个文件中定义所有内容。这将是一个更大的应用程序非常糟糕:)阅读official short doc,并看到那里的建议(其中包括前面的答案中提到的蓝图,哪个是组织大型应用程序的真正好方法)。

关于如何组织和创建更大的应用程序,还有一个不错的sample app。可能也有帮助;)

其他方法,类和不是Flask特定的所有东西都是简单的Python,所以也不需要将它们放在一个文件中。

+0

谢谢,示例应用程序非常有用 – Noor

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 #For烧瓶应用

    url_for(' 指数')#For蓝图

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