extensions文件
数据库init
from flask_sqlalchemy import SQLAlchemy
from flask_sqlalchemy.query import Query # baseQuery
from flask_marshmallow import Marshmallow
from flask_migrate import Migrate
from flask import Flask
import click
db = SQLAlchemy()
ma = Marshmallow()
migrate = Migrate()
def init_databases(app: Flask):
db.init_app(app)
ma.init_app(app)
migrate.init_app(app, db)
日志init
from flask import Flask
import logging
def init_logs(app: Flask):
logging_format = logging.Formatter(
"[%(asctime)s][%(filename)s:%(lineno)d][%(levelname)s][%(thread)d] - %(message)s"
)
handler = logging.FileHandler('flask.log', encoding='utf-8')
handler.setFormatter(logging_format)
app.logger.addHandler(handler)
flask-login插件init
from flask_login import LoginManager
from flask import Flask
def init_login_manager(app: Flask):
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'userView.login'
login_manager.login_message = '请登录以访问此页面'
@login_manager.user_loader
def load_user(user_id):
from ..models import User
user = User.query.get(int(user_id))
return user
app初始化 init
import click
from .init_sqlalchemy import db
from flask import Flask
from flask_session import Session
# 数据库迁移自定义命令init-db
@click.command('init-db')
def init_db_command():
from ..models import User, user_role, Role, rolw_power, Power, Classify, QuestionBlank, Log
db.drop_all()
db.create_all()
click.echo('初始化数据库成功')
# 添加init-db命令
def init_app(app: Flask):
# flask-session配置
Session(app)
# flask自定义命令配置
app.cli.add_command(init_db_command)
extensions/init.py文件
from .init_sqlalchemy import db, ma, init_databases, migrate
from .init_app import init_app
from .init_login import init_login_manager
from .init_logs import init_logs
from flask import Flask
def init_plugs(app: Flask):
init_logs(app)
init_databases(app)
init_app(app)
init_login_manager(app)
config
config.py
import logging
import os
from redis import Redis
class BaseConfig:
JSON_AS_ASCII = False
SECRET_KEY = os.urandom(24)
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
MYSQL_USERNAME = 'root'
MYSQL_PASSWORD = '123456'
MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3306
MYSQL_DATABASE = 'flask'
SQLALCHEMY_DATABASE_URI = f'mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}?charset=utf8mb4'
SESSION_TYPE = 'redis' # flask-sesson使用redis
SESSION_REDIS = Redis(host=REDIS_HOST, port=REDIS_PORT) # 默认为127.0.0.1 6379
# SESSION_KEY_PREFIX = 'obj:' # 设置开头默认为"session:15a791ab-012e-45bf-9679-b2948ec3b629"
SESSION_USE_SIGNER = True # 开启加盐
SESSION_PERMANENT = False # 关闭浏览器清空
PERMANENT_SESSION_LIFETIME = 3600 # 有效时间
LOG_LEVEL = logging.WARN
# 开发环境
class DevelopmentConfig(BaseConfig):
# 跟踪对象的修改, 发送信号, 需要额外的内存
SQLALCHEMY_TRACK_MODIFICATIONS = True
# 记录SQL调试答应输出
SQLALCHEMY_ECHO = True
config = {
'dev': DevelopmentConfig
}
init
from .config import config