Flask的配置2拆包处理

补充:在使用蓝图时,注册蓝图应在创建app的函数中导入创建的蓝图
项目的分组
在这里插入图片描述


manage.py文件
# conding:utf-8

from ihome import creat_app, db
from flask_script import Manager  # 导入脚本
from flask_migrate import Migrate, MigrateCommand  # 管理models


app = creat_app("development")
Migrate(app=app, db=db)  # 将迁移者保存在app中,并且在迁移的过程中使用到数据库
manager = Manager(app)  # 使用manager管理app
manager.add_command("db", MigrateCommand)  # 添加数据库的命令

if __name__ == '__main__':
    manager.run()


config.py
import redis


class Config(object):
    """flask的配置"""
    SECRET_KEY = "EQWEQWNJEWHNQJK34N423NYH56NKEWK"  # 配置密钥

    # 配置redis链接的主机和端口号
    REDIS_HOST = "127.0.0.1"
    REDIS_PORT = 6379

    # mysql数据库的配置,先在数据库新建database
    SQLALCHEMY_DATABASE_URI = "mysql://root:@localhost:3306/ihome"
    SQLALCHEMY_TRACK_MODIFICATIONS = True

    # 在app中做session的配置
    SESSION_TYPE = "redis"  # 存储session的类型为redis
    SESSION_REDIS = redis.StrictRedis(host=REDIS_PORT, port=REDIS_PORT)  # 测试项目使用同一台redis服务器
    SESSION_USE_SIGNER = True  # 对cookie中的session_id做混淆处理
    PERMANENT_SESSION_LIFETIME = 86400  # 设置session的有效期,时间为一天


class DevelopmentConfig(Config):
    """开发模式的配置"""
    DEBUG = True   # debug为true


class ProduceConfig(Config):
    """生产模式"""
    pass


#配置映射
CONFIG_MAP = {
    "development": DevelopmentConfig,
    "produce": ProduceConfig
}

ihome下的 init.py


from flask import Flask
from config import CONFIG_MAP
from flask_sqlalchemy import SQLAlchemy  # 导入和flask框架相关的mysql数据库
import redis, logging  # 导入redis数据库,作为缓存数据库  导入日志logging
from flask_session import Session  # 使用flask扩充的session
from flask_wtf import CSRFProtect
from logging.handlers import RotatingFileHandler

# 创建数据库,一开始不绑定app,当app被创建时再绑定app
db = SQLAlchemy()

redis_store = None
# csrf保护
csrf = CSRFProtect()


# log记录
def setup_log():
    """配置日志"""

    # 级别从高到低
    # logging.error()  # 错误级别
    # logging.warn()  # 警告级别
    # logging.info()  # 消息级别
    # logging.debug()  # 调试级别

    # 设置日志的记录等级
    logging.basicConfig(level=logging.DEBUG)  # 调试debug级
    # 创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限,最多保留10个文件
    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)


# app的工厂模式,根据不同的开发环境使用不同的配置
def creat_app(config_name):
    """
    根据不同的环境,配置app
    :param config_name: str类型  可选{"development","produce"}
    :return:
    """
    app = Flask(__name__)

    # 选择不同环境的config
    config_type = CONFIG_MAP.get(config_name)
    # 注册配置
    app.config.from_object(config_type)

    # app被创建时绑定app
    db.init_app(app)

    # 全局变量声明
    global redis_store
    # 创建redis链接对象
    redis_store = redis.StrictRedis(host=config_type.REDIS_HOST, port=config_type.REDIS_PORT)  # host为链接的主机,port为链接的端口号,在config中配置

    from ihome.api_v1 import api  # 放在函数中,解决循环导入的问题
    # 注册蓝图
    app.register_blueprint(api, url_prefix="/v1")

    # csrf保护
    CSRFProtect(app)

    # 配置session,将session数据保存在redis中
    Session(app)
    setup_log()  # 创建app时启动log文件
    return app



蓝图设计

# 测试使用的demo,使用flask中的蓝图
from flask import Blueprint

# 创建蓝图对象
api = Blueprint('api_1_0', __name__)

# 让蓝图知道demo的存在
from . import demo
from . import api


@api.route('/')
def hello_world():
    return 'Hello World!'

在项目中使用到了蓝图的包,防止循环导包,在注册app的函数中,注册蓝图之前再导入蓝图!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值