一,基本框架的搭建
目录截图
1, manager 模块
1),用来管理程序的启用!
2),可以用来执行数据库的迁移
from flask_migrate import MigrateCommand, Migrate from Flask_.templates import add_app, db from flask_script import Manager from Flask_.setting import ProductionConfig, DevelopmentConfig # 用来配置信息的 app = add_app(ProductionConfig) # 管理器对象!用来进行数据库的迁移! manager = Manager(app, db) Migrate(app, db) manager.add_command('db', MigrateCommand) if __name__ == '__main__': manager.run() ''' 完成发布与开发阶段的调试是通过一个方法来更改的类型! redis 也需要配置到setting 之中! '''
2,setting 模块用来设置配置参数的
1),配置mysql数据库的信息
2),配置redis的信息
3),session 保存到redis数据库所需要的参数!
4),所有的信息都从setting之中获取!
import logging import redis import os,base64 class Config(): '''mysql 配置''' SQLALCHEMY_DATABASE_URI = 'mysql://root:x@127.0.0.1:3306/manager' SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_ECHO = False '''redis 配置,如果想要启用Session 存储到Redis之中需要配置!''' REDIS_POST = '127.0.0.1' REDIS_PORT = 6379 '''一下是session 存储到redis 必须的几个信息!''' SESSION_TYPE = 'redis' SESSION_REDIS = redis.StrictRedis(host=REDIS_POST, port=REDIS_PORT) PERMANENT_SESSION_LIFETIME = 86400 * 7 #有效时间为7天 SECRET_KEY = base64.b64encode(os.urandom(32)) # 通过继承与增加 debug,根据不同的类来解决不同log等级问题! class DevelopmentConfig(Config): """开发模式下的配置""" DEBUG = True LOGE_live = logging.debug class ProductionConfig(Config): """生产模式下的配置""" DEBUG = True LOGE_live = logging.WARN
3,__init__ 是用来具体的工作开启
1),app 的开启
2),mysql 的连接,从setting之中拿配置信息
3),redis 的连接,并且返回一个接口,供视图连接调用操作
4),session 存储到redis的
import logging from logging.handlers import RotatingFileHandler from flask import Flask from flask_session import Session from flask_sqlalchemy import SQLAlchemy from flask_wtf import CSRFProtect from Flask_.setting import redis #创建数据库! db = SQLAlchemy() #设置redis 存储对象,供视图调用! redis_store = None def log_set_up(config_add): # 设置日志的记录等级,根据不同的模式设置不同的level! logging.basicConfig(level=config_add.DELOGE_live) # 调试debug级 # 创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限 file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024 * 1024 * 100, backupCount=10) # 创建日志记录的格式 日志等级 输入日志信息的文件名 行数 日志信息 formatter = logging.Formatter('%(levelname)s %(filename)s:%(lineno)d %(message)s') # 为刚创建的日志记录器设置日志记录格式 file_log_handler.setFormatter(formatter) # 为全局的日志工具对象(flask app使用的)添加日志记录器 logging.getLogger().addHandler(file_log_handler) def add_app(config_add): '''通过manager 传参,传入的是对象!,对象在setting 之中,对象属性来进行添加属性! 两次连接redis 一次连接是为了供视图使用,一次是为了存储session的值 ''' app = Flask(__name__) # 启用log记录 log_set_up(config_add) app.config.from_object(config_add) # 初始化对象对象!相当于db = SQLAlchemy(app) db.init_app(app) ''' redis 操作连接 ''' global redis_store # 连接redis,返回对象供视图使用! redis_store = redis.StrictRedis(host=config_add.REDIS_POST, port=config_add.REDIS_PORT) '''蓝图,用来实现地址寻找的!''' from Flask_.templates.index import index_bure app.register_blueprint(index_bure) '''开启跨站请求伪造保护!''' CSRFProtect(app) '''sessin 存储到redis 之中!''' redis.StrictRedis(host=config_add.REDIS_POST, port=config_add.REDIS_PORT) Session(app) return app
4,视图文件夹之下的__init__
1),创建蓝图对象!
2),导入子模块
3),每个子模块都要进行注册!
from flask import Blueprint #创建蓝图对象! index_bure = Blueprint('index', __name__) #导入子模块 from . import index
5,视图模块
1),导入蓝图对象!
2),蓝图对象装饰到视图函数之中去!
from flask import Blueprint #创建蓝图对象! index_bure = Blueprint('index', __name__) #导入子模块 from . import index