2016-04-18 62 views
0

我正在寫一個燒瓶站點,我不知道哪些文件應該包含我的運行,配置和設置代碼。我的目錄結構如下所示:燒瓶:需要澄清在運行,配置和設置佈局

/ 
    dev_settings.py 
    run.py 
    various other files... (schema, production_settings, etc) 
    /sitename 
    __init__.py 
    various other files... (routes, models, etc) 

而且dev_settings.py,run.py和__init__.py的內容如下。我對它的理解是這樣的:

  • run.py是入口點。
  • 它從sitename/__ init__.py中獲取應用程序對象,並從dev_settings(或production_settings)中導入配置設置。
  • 在某些時候,__init__.py中的(其餘部分)設置代碼是否運行?這是代碼在兩者之間「應用=瓶(__ name__)」和「進口sitename.admin_routes」

我卻無法從__init__.py(例如,通過嘗試訪問任何自定義配置變量「打印app.config ['從dev_settings'導入的東西]「),現在我遇到了一個問題,因爲我想上傳文件,並且我無法創建和配置UploadSet,而沒有在dev_settings.py中設置的UPLOADED_IMAGES_DEST

我在哪裏錯了?爲什麼run.py的app.config在其他地方不可見?我絕對必須壓縮run.py和__init__.py嗎?我寧願讓他們分開。

dev_settings.py

#!/usr/bin/env python 
# -*- encoding: utf-8 -*- 
#dev_settings.py 

import os 
from flask.ext.uploads import IMAGES 

basedir = os.path.abspath(os.path.dirname(__file__)) 

DEBUG = True 
TESTING = False 
SECRET_KEY = 'SECRET' 
DATABASE = 'dev.db' 
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, DATABASE) 
UPLOADED_IMAGES_DEST = 'site/images/' 
UPLOADED_IMAGES_ALLOW = IMAGES 
UPLOADED_IMAGES_URL = 'images/' 

run.py

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
# run.py 

from flask import Flask 
import socket 
from sitename import app 

if __name__ == '__main__': 
    if socket.gethostname() == 'dev_laptop': 
     app.config.from_object('dev_settings') 
    else: 
     app.config.from_object('prod_settings') 
    app.run() 

__init__.py

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
# __init__.py 

from flask import Flask 
from flask.ext.login import LoginManager 
from flask_wtf.csrf import CsrfProtect 
from flask.ext.sqlalchemy import SQLAlchemy 
from flask.ext.bcrypt import Bcrypt 

app = Flask(__name__) 

login_manager = LoginManager() 
login_manager.init_app(app) 
CsrfProtect(app) 
db = SQLAlchemy(app) 
bcrypt = Bcrypt(app) 


import sitename.admin_routes 
+0

當你輸入'站點名稱/ __ __初始化。py',它完全執行之前'run.py'恢復執行。這意味着您在初始化您的擴展後設置配置。 – dirn

+0

如果我要移動一些設置線,讓我們說「db = SQLAlchemy(app)」到run.py中,我將如何訪問主項目中的該變量?我將無法再運行「from sitename import db」。有沒有不同的方式來導入它? – thekthuser

+0

您可能需要查看一些[常用應用程序佈局](http://stackoverflow.com/a/14421367/978961)。 – dirn

回答

0

我原來的問題沒有從完全理解從鏈接的「較大的應用程序頁面朵朵頁面鏈接(http://flask.pocoo.org/docs/0.10/patterns/packages/)。解決的辦法是有run.py導入應用程序,調用app.run(),沒有別的。我的更新代碼如下。

run.py

#!/usr/bin/env python                     
# -*- coding: utf-8 -*-                    
# run.py                        

from sitename import app                     

app.run() 

初始化的.py

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
# __init__.py 

from flask import Flask 
from flask.ext.login import LoginManager 
from flask_wtf.csrf import CsrfProtect 
from flask.ext.sqlalchemy import SQLAlchemy 
from flask.ext.bcrypt import Bcrypt 
import socket 

app = Flask(__name__) 

#if __name__ == '__main__': 
if socket.gethostname() == 'dev_laptop': 
    app.config.from_object('dev_settings') 
else: 
    app.config.from_object('prod_settings') 

login_manager = LoginManager() 
login_manager.init_app(app) 
CsrfProtect(app) 
db = SQLAlchemy(app) 
bcrypt = Bcrypt(app) 
configure_uploads(app, images) 

import sitename.admin_routes