我正在写一个烧瓶网站,我不确定哪些文件应该包含我的运行,配置和设置代码 . 我的目录结构如下所示:
/
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获取一个app对象,并从dev_settings(或production_settings)导入配置设置 .
-
在某些时候,运行__init__.py中的(其余的)设置代码?这是"app = Flask(name)"和"import sitename.admin_routes"之间的代码
然而,我不能从__init__.py访问任何自定义配置变量(例如,通过尝试“print app.config ['从dev_settings'导入的东西']”)现在我遇到了问题,因为我想上传文件如果没有在dev_settings.py中设置的UPLOADED_IMAGES_DEST,我无法创建和配置UploadSet
我在哪里错了?为什么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
1 回答
我原来的问题源于没有完全理解从页面链接链接的'Larger Applications'页面(http://flask.pocoo.org/docs/0.10/patterns/packages/) . 解决方案是使用run.py导入应用程序,调用app.run(),而不是其他任何内容 . 我的更新代码如下 .
run.py
init .py