Python Flask方法定义

时间:2012-12-22 20:44:03

标签: python flask

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

3 个答案:

答案 0 :(得分:4)

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

还有一个很好的sample app如何组织和创建更大的应用程序。也可以提供帮助;)

其他方法,类和Flask特有的一切都只是简单的Python,因此也不需要将它们放在一个文件中。

答案 1 :(得分:1)

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

答案 2 :(得分: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)

关于蓝图的一些问题:

  • 蓝图不是应用程序,不要指望它们表现得如此。
  • Blueprint可以定义它们自己的模板文件夹,这对您很有用 可以按照每个蓝图的文件夹模块特定模板和订购您的应用。
  • 你应该永远记住追加'。'当试图得到一个 资源:

    url_for('。index')#For flask app

    url_for('。index')#For blueprints

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