2016-11-21 123 views
0

我有我的Linode的燒瓶中的應用程序設置了目錄結構如下所示:我不需要Flask應用程序中的run()方法嗎?

|--------flask-test 
|----------------app 
|-----------------------static 
|-----------------------templates 
|-----------------------venv 
|-----------------------__init__.py 
|-----------------------main.py 

__init__.py是:

# __init__.py 
from flask import Flask 
from main import main 
app = Flask(__name__) 
app.register_blueprint(main) 
app.run() 

main.py像這樣:

# main.py 
from flask import Blueprint 

main = Blueprint('main',__name__) 
@main.route("/") 
def hello(): 
    return "Hello World!" 

@main.route("/england/") 
def england(): 
    return "Hello England!" 

如果我在本地運行應用程序沒有問題。如果我在Web瀏覽器中訪問我的服務器地址,則會發生內部服務器錯誤。但是,如果我從__init__.py刪除行:app.run它工作正常。爲什麼是這樣?爲什麼我不需要運行方法?

回答

3

你應該做

if __name__ == '__main__': 
    app.run() 

的原因是,Apache或NGINX或其他Web服務器直接加載您的應用程序在服務器上,但app.run()運行燒瓶的內部Web服務器,因此您可以測試您的應用程序。

1

這是一個有點奇怪有app.run()__init__.py文件裏,通常它會在你運行一個單獨的應用程序腳本,它會被寫爲:

if __name__ == '__main__': 
    app.run() 

這樣app.run()只調用當該腳本作爲應用程序執行時。

這是必要的,因爲您不希望在WSGI服務器(如mod_wsgi或gunicorn)下託管時調用app.run()。在使用這樣的WSGI服務器時,即使重複使用與WSGI應用程序入口點持有者相同的腳本文件,__name__也不會設置爲__main__,而是腳本文件的基本名稱。這確保app.run()不被調用,它是運行Web服務器組件的獨立WSGI服務器。

+0

感謝您的解釋。我將它移動到一個單獨的'run.py'腳本中,並將其添加到'.gitignore'中以將其保留在我的linode服務器上。 – KexAri

相關問題