【发布时间】:2016-08-09 13:51:26
【问题描述】:
我正在编写一个烧瓶站点,但我不确定哪些文件应该包含我的运行、配置和设置代码。我的目录结构如下:
/
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 中的(其余)设置代码运行了吗?这是“app = Flask(__name__)”和“import sitename.admin_routes”之间的代码
但是,我无法从 __init__.py 访问任何自定义配置变量(例如,通过尝试“print app.config['stuff 从 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/'
运行.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
【问题讨论】:
-
当您导入
sitename/__init__.py时,它会在run.py恢复执行之前完全执行。这意味着配置是在您初始化扩展后设置的。 -
如果我要移动一些设置行,让我们说“db = SQLAlchemy(app)”到 run.py,我将如何访问主项目中的那个变量?我将无法再运行“从站点名称导入数据库”。有没有其他的导入方式?
-
您可能想查看一些common application layouts。
-
嗯,所以我认为我应该将除“从站点名称导入应用程序”和“app.run()”之外的所有内容移出 run.py 我现在没有时间尝试,但是这是有道理的,我会在可能的时候报告。谢谢。
标签: python flask structure directory-structure