- flask-version: 3.0.3
搭建项目框架
python
from school import create_app, db, setup_log
app = create_app("development")
setup_log('development')
if __name__ == '__main__':
app.run(host="127.0.0.1", port=5000, debug=True)
- 创建模块module和log目录以及 config.py 配置文件夹。
- module 模块存放子模块,包含蓝图以及子视图的逻辑
- log 目录用以存放log文件,用current_app.logger.error(e) 进行调用, log配置函数定义在module文件夹的
__init__.py
中 - config 文件 用来存放 不同开发环境的配置,比如 开发环境 测试环境 生产环境,对应的 debug等级不同。基本定义如下:
python
class Config(object):
"""工程配置信息"""
SECRET_KEY = "xxx/+xss+xxx"
# 数据库的配置信息
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:mysql@127.0.0.1:3306/school"
SQLALCHEMY_TRACK_MODIFICATIONS = True
# redis配置
REDIS_HOST = "127.0.0.1"
REDIS_PORT = 6379
# session 配置
SESSION_TYPE = "redis" # 指定 session 保存到 redis 中
SESSION_USE_SIGNER = True # 让 cookie 中的 session_id 被加密签名处理
SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT) # 使用 redis 的实例
PERMANENT_SESSION_LIFETIME = 86400 # session 的有效期,单位是秒
class DevelopmentConfig(Config):
DEBUG = True
LOG_LEVEL = logging.DEBUG
class ProduceComfig(Config):
DEBUG = False
LOG_LEVEL = logging.ERROR
这里需要注意 在使用 orm 的时候
python
pip install flask-sqlalchemy
pip install flask-mysqldb
# 那么在Config函数中配置 mysql 就需要 mysql+pymysql 不然报错
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:mysql@127.0.0.1:3306/school"
SQLALCHEMY_TRACK_MODIFICATIONS = True
- module 文件夹下 init .py 要处理如下事情
- 配置数据库
- 配置redis
- 数据库迁移
- 开启csrf 防护
- 函数入口 -index
- 请求钩子处理 如 404页面 和 设置 cookie
python
def create_app(config_name):
app = Flask(__name__)
# 配置
app.config.from_object(config_dict[config_name])
# 配置数据库
db.init_app(app)
# 数据库迁移
migrate = Migrate(app, db)
# 配置redis
global redis_store
redis_store = redis.StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT)
# 开启csrf保护
CSRFProtect(app) # 解决csrf_token
# 设置session保存位置
Session(app)
关于数据库迁移
需先声明环境变量
python
#flask 迁移数据库
export FLASK_APP=manage.py
flask db init # once need 只需要在第一次同步数据库的时候用
flask db mgrate -m''
flask db upgrade
关于静态文件
- 需要定义在module 目录下