【问题标题】:Flask: need clarification on run, config, and setup layoutFlask:需要澄清运行、配置和设置布局
【发布时间】: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


【解决方案1】:

我最初的问题源于没有完全理解从链接页面 (http://flask.pocoo.org/docs/0.10/patterns/packages/) 链接的“大型应用程序”页面。解决方案是让 run.py 导入应用程序,调用 app.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

【讨论】:

    猜你喜欢
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多