2012-12-22 115 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對象。