Flask项目数据库配置、redis配置、session配置、csrf配置,log配置

1. 在app.py文件中
from datetime import timedelta
from flask_wtf.csrf import CSRFProtect
from flask import Flask, session
from flask_sqlalchemy import SQLAlchemy
from redis import StrictRedis
from flask_session import Session

app = Flask(__name__)


class Config():
    # 调试信息
    DEBUG = True
    SECRET_KEY = 'fjsiogkgnmdinging'

    # 数据库信息
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/info36'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    # redis配置
    REDIS_HOST = '127.0.0.1'
    REDIS_PORT = 6379

    # session配置
    SESSION_TYPE = 'redis'  # 设置session的存储类型
    SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT)  # 指定session存储的服务器
    # SESSION_USE_SIGNER = True  # 设置签名存储
    PERMANENT_SESSION_LIFETIME = timedelta(days=1)  # 设置签名过期时间


app.config.from_object(Config)

# 创建数据库关联对象并关联app
db = SQLAlchemy(app)

# 创建redis对象
# 当 decode_responses 设置为 True 时,Redis 返回的字符串数据将会被解码为 Python 字符串类型。这样可以方便地处理 Redis 中存储的文本数据。
# 而当 decode_responses 设置为 False(默认值)时,Redis 返回的字符串数据将会以字节字符串(bytes)的形式返回。
# 这在处理二进制数据或者需要与其他 Redis 客户端进行交互时可能更为合适
redis_store = StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT, decode_responses=True)

# 创建session对象
Session(app)

# 使用CSRFProtect保护app
CSRFProtect(app)


@app.route('/', methods=['GET', 'POST'])
def hello_world():
    # 测试redis存取数据
    redis_store.set("name", "laowang")
    print(redis_store.get("name"))

    # 测试session存取
    session["name"] = "zhangsan"
    print(session.get("name"))
    return "helloworld"


if __name__ == '__main__':
    app.run()
2.这样写在一起不方便后续开发,所以进行抽取
        1.抽取配置类,将配置信息放入项目根目录下的config.py文件中,然后在导入app.py文件中。
from datetime import timedelta

from redis import StrictRedis


class Config():
    # 调试信息
    DEBUG = True
    SECRET_KEY = 'fjsiogkgnmdinging'

    # 数据库信息
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/info36'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

    # redis配置
    REDIS_HOST = '127.0.0.1'
    REDIS_PORT = 6379

    # session配置
    SESSION_TYPE = 'redis'  # 设置session的存储类型
    SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT)  # 指定session存储的服务器
    # SESSION_USE_SIGNER = True  # 设置签名存储
    PERMANENT_SESSION_LIFETIME = timedelta(days=1)  # 设置签名过期时间

    # 配置默认的log等级
    LEVEL_NAME = logging.DEBUG


# 开发环境配置信息
class DevelopConfig(Config):
    pass


# 生产(线上)环境配置信息
class ProductConfig(Config):
    DEBUG = False


# 测试环境配置信息
class TestConfig(Config):
    pass


# 提供一个统一的访问入口
config_dict = {
    "develop": DevelopConfig,
    "product": ProductConfig,
    "test": TestConfig
}
        2.将初始化信息抽取,在项目根目录下创建一个包,此包名与项目名相关。并在init.py文件中将初始化信息放入,主要就是创建一个create_app方法方便调用
from flask_wtf.csrf import CSRFProtect
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from redis import StrictRedis
from flask_session import Session

from config import Config, config_dict


def create_app(config_name):
    app = Flask(__name__)

    # 获取config配置
    config = config_dict.get(config_name)

    app.config.from_object(config)


    # 调用日志方法,记录程序运行信息
    log_file(config.LEVEL_NAME)


    # 创建数据库关联对象并关联app
    db = SQLAlchemy(app)

    # 创建redis对象
    # 当 decode_responses 设置为 True 时,Redis 返回的字符串数据将会被解码为 Python 字符串类型。这样可以方便地处理 Redis 中存储的文本数据。
    # 而当 decode_responses 设置为 False(默认值)时,Redis 返回的字符串数据将会以字节字符串(bytes)的形式返回。
    # 这在处理二进制数据或者需要与其他 Redis 客户端进行交互时可能更为合适
    redis_store = StrictRedis(host=config.REDIS_HOST, port=config.REDIS_PORT, decode_responses=True)

    # 创建session对象
    Session(app)

    # 使用CSRFProtect保护app
    CSRFProtect(app)

    return app


def log_file(LEVEL_NAME):
    # 设置日志的记录等级,常见的有四种,DEBUG<INFO<WARNING<ERROR
    logging.basicConfig(level=LEVEL_NAME)  # 调试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)
        3.视图函数的抽取,视图函数要放入对应模块中的init文件中,    
###########  1.在模块包index下的init文件中创建 ##################

from flask import Blueprint

# 创建蓝图对象
index_blue = Blueprint('/index',__name__)

# 引入views
from info.modules.index import view
#################2.在view文件中使用######################

from info.modules.index import index_blue


@index_blue.route('/', methods=['GET', 'POST'])
def hello_world():
    return "helloworld"
###################3. 在项目文件中的init.py中注册蓝图#############

from flask_wtf.csrf import CSRFProtect
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from redis import StrictRedis
from flask_session import Session
from config import config_dict


def create_app(config_name):
    app = Flask(__name__)

    # 获取config配置
    config = config_dict.get(config_name)

    app.config.from_object(config)

    # 创建数据库关联对象并关联app
    db = SQLAlchemy(app)

    # 创建redis对象
    # 当 decode_responses 设置为 True 时,Redis 返回的字符串数据将会被解码为 Python 字符串类型。这样可以方便地处理 Redis 中存储的文本数据。
    # 而当 decode_responses 设置为 False(默认值)时,Redis 返回的字符串数据将会以字节字符串(bytes)的形式返回。
    # 这在处理二进制数据或者需要与其他 Redis 客户端进行交互时可能更为合适
    redis_store = StrictRedis(host=config.REDIS_HOST, port=config.REDIS_PORT, decode_responses=True)

    # 创建session对象
    Session(app)

    # 使用CSRFProtect保护app
    CSRFProtect(app)

    # 注册蓝图
    from info.modules.index import index_blue
    app.register_blueprint(index_blue)

    return app

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值