大型程序的结构
项目结构
示例 7-1 多文件 Flask 程序的基本结构
|-flasky
\(\quad\) |-app/
\(\quad\quad\) |-templates/
\(\quad\quad\) |-static/
\(\quad\quad\) |-main/
\(\quad\quad\quad\) |-init.py
\(\quad\quad\quad\) |-errors.py
\(\quad\quad\quad\) |-forms.py
\(\quad\quad\quad\) |-views.py
\(\quad\quad\) |-init.py
\(\quad\quad\) |-email.py
\(\quad\quad\) |-models.py
\(\quad\) |-migrations/
\(\quad\) |-tests/
\(\quad\quad\) |-init.py
\(\quad\quad\) |-test*.py
\(\quad\) |-venv/
\(\quad\) |-requirements.txt
\(\quad\) |-config.py
\(\quad\) |-manage.py
这种结构有4个顶级文件夹:
Flask程序一般都保存在名为app的包中
migrations文件夹包含数据库迁移脚本
单元测试编写在tests包中
venv文件夹包含Python虚拟环境
同时还创建一些新文件:
requirements.txt列出了所有依赖包,便于在其他电脑中重新生成相同的虚拟环境
config.py存储配置
manage.py用于启动程序以及其他的程序任务
配置选项
config.py
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]'
FLASKY_MAIL_SENDER = 'Flasky Admin <flasky@example.com>'
FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN')
@staticmethod
def init_app(app):
pass
#配置类可以定义 init_app() 类方法,其参数是程序实例。在这个方法中,可以执行对当前
环境的配置初始化。现在,基类 Config 中的 init_app() 方法为空。
class DevelopmentConfig(Config):
DEBUG = True
MAIL_SERVER = 'smtp.googlemail.com'
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')
class TestingConfig(Config):
TESTING = True
SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data-test.sqlite')
class ProductionConfig(Config):
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data.sqlite')
config = {
'development': DevelopmentConfig,
'testing': TestingConfig,
'production': ProductionConfig,
'default': DevelopmentConfig
}
#Config中包含通用配置,子类分别定义专用的配置。
程序包
程序包用来保存程序的所有代码,模板和静态文件。我们可以把这个包直接称为app(应用)。templates和static文件夹是程序包的一部分,因此这两个文件夹被移到了app中。

浙公网安备 33010602011771号