大型程序的结构

项目结构

示例 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中。

posted @ 2018-02-15 16:14  blog_hfg  阅读(338)  评论(0)    收藏  举报