首页 文章

Flask:需要澄清运行,配置和设置布局

提问于
浏览
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获取一个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 回答

  • 0

    我原来的问题源于没有完全理解从页面链接链接的'Larger Applications'页面(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()
    

    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
    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
    

相关问题