flask 配置(redis、mysql、log) 详细步骤

一、 先写框架

 先在一个py文件里将信息写好,然后再进行项目拆分。

manage.py 里写上主框架

from flask import Flask

app = Flask(__name__)

@app.route('/index')
def index():
    return 'hello'

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

 在往里面填充内容

manage.py

 

#__init__
# coding:utf-8
from flask import Flask
from config import config_map  #导入配置信息
from flask_sqlalchemy import SQLAlchemy #数据库
import redis # 连接redis库
# from flask_wtf import CSRFProtect  # csrf 防护

"""
flask有个自带的session 就是import session  还有一个扩展包session 就是这个Session
用这个扩展包Session是因为 自带的session会将数据依存于cookie,在前端页面就能看到session数据,这也是flask和Django不一样点
而扩展的Session有很大的自主权,我们可以规定将session信息存储在哪里,所以,我们用扩展的Session将session数据存在redis里面
"""
from flask_session import Session

from ihomeinner.api_1_0.demo import api
# 数据库
db = SQLAlchemy()

# 创建redis连接对象
redis_store = None

# 工厂模式
def create_app(config_name):  #配置文件里面的config_map包含了配置信息、开发环境配置信息等,在启动入口的地方(manager.py),会写明具体需要什么配置信息
    """
    创建flask的应用对象
    :param param: 配置模式的模式名字(‘develop’ , ‘product’)
    :return:
    """
    app = Flask(__name__)

    #  根据配置模式的名字获取配置参数的类
    config_class = config_map.get(config_name)
    app.config.from_object(config_class)  #导入配置信息

    # 使用app初始化db
    db.init_app(app)

    # 初始化redis工具
    global redis_store
    redis_store = redis.StrictRedis(host=config_class.REDIS_HOST,port=config_class.REDIS_PORT)

    # 利用flask——session 将session数据保存到redis中
    Session(app)

    # 为flask 补充csrf防护  如果不做这个防护的话  有人就会通过post请求 利用漏洞对代码产生威胁
    # CSRFProtect(app)

    # 注册蓝图
    # app.register_blueprint(api,url_prefix='/api/v1.0')
    app.register_blueprint(blueprint=api)

    return app
有感:

        写代码,要写一步运行一步!!!!,不然等写很多代码了,再运行,出现报错时,真的不知道是哪里的错误。就像上面manage.py的代码,我写完代码后,没有运行,直接将代码拆分在很多文件里,然后运行拆分代码的时候发现报错,然后,,,,就开启了找代码的茫茫之路中,,,,从导包到找配置,,,最后还是一步步注释--放开原来的代码,然后重新一步步运行,才找到的。。。。。报错的时候真的很折磨啊!!!!!

---------------运行的时候要开启redis 因为我们配置了redis   不开启的话会报错-----------------------------

 

 二、拆分项目

配置文件

#config.py
# coding:utf-8
import redis
from datetime import timedelta
class Config(object):
    """ 配置信息 """

#     加密
    SECRET_KEY = 'XHSOI*y9dfsck'
#     连接mysql数据库
    SQLALCHEMY_DATABASE_URI ='mysql+pymysql://用户名:密码@localhost:3306/数据库名'
    # 动态追踪修改设置,如未设置只会提示警告
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # 查询时会显示原始SQL语句
    SQLALCHEMY_ECHO = True

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

#     flask_session 配置
    SESSION_TYPE='redis'
    # 实际上flask_session连接的redis不是本机的redis,是另一台的服务器,它的host和port应该是另一台服务器的host和port,但是因为现在没有,所以就先存在本机上了
    SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST,port=REDIS_PORT)

    SESSION_USE_SIGNER = False  #是否对cookie中的session_id进行隐藏处理
    # 如果设置SESSION_USE_SIGNER = True的话 启动前端会出现TypeError: cannot use a string pattern on a bytes-like object 报错

    PERMANENT_SESSION_LIFETIME = timedelta(days=1)  # 设置签名过期时间
    PERMANENT_SESSION_LIFETIME = 3600*24 #设置session数据的有效期,单位为秒

class DevelopmentConfig(Config):
    """开发模式的配置信息"""
    DEBUG=True
    pass

class ProductionConfig(Config):
    """生产环境配置信息"""
    pass

config_map ={
    'develop':DevelopmentConfig,
    'product':ProductionConfig
}

   视图文件

# demo.py
from ..exts import db
from . import api
import logging
from flask import current_app
from ..models import *  #必须得将models这个文件导进来  不然的话迁移就会报错  因为models没有和其他py文件有关联,只有它自己知道自己存在,所以会报错


@api.route("/index")
def index():
    # logging.error('error info')  #记录错误信息
    # logging.warn('warn')   #警告
    # logging.info('massage')  #信息
    # logging.debug('') #调试
    current_app.logger.error('error infp')
    current_app.logger.warn('warn')
    current_app.logger.info('')
    current_app.logger.debug('')
    return 'test'





 初始化文件

# coding:utf-8
from flask import Flask
from config import config_map  #导入配置信息
import redis # 连接redis库
from flask_wtf import CSRFProtect  # csrf 防护

"""
flask有个自带的session 就是import session  还有一个扩展包session 就是这个Session
用这个扩展包Session是因为 自带的session会将数据依存于cookie,在前端页面就能看到session数据,这也是flask和Django不一样点
而扩展的Session有很大的自主权,我们可以规定将session信息存储在哪里,所以,我们用扩展的Session将session数据存在redis里面
"""
from flask_session import Session

from .exts import init_exts
import logging
from logging.handlers import RotatingFileHandler

# 创建redis连接对象
redis_store = None
# 配置日志信息
# 设置日志的记录等级
#           这个是INFO级别
logging.basicConfig(level=logging.INFO)
#           这个是WARNING级别
# logging.basicConfig(level=logging.WARNING)
# 创建日志记录器,指明日志保存的路径,每个日志文件的最大大小。保存的日志文件个数上线
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 create_app(config_name):  #配置文件里面的config_map包含了配置信息、开发环境配置信息等,在启动入口的地方(manager.py),会写明具体需要什么配置信息
    """
    创建flask的应用对象
    :param param: 配置模式的模式名字(‘develop’ , ‘product’)
    :return:
    """
    app = Flask(__name__)

    #  根据配置模式的名字获取配置参数的类
    config_class = config_map.get(config_name)
    app.config.from_object(config_class)  #导入配置信息

    # 第三方插件初始化
    init_exts(app)
    # 初始化redis工具
    global redis_store
    redis_store = redis.StrictRedis(host=config_class.REDIS_HOST,port=config_class.REDIS_PORT)

    # 利用flask——session 将session数据保存到redis中
    Session(app)

    # 为flask 补充csrf防护  如果不做这个防护的话  有人就会通过post请求 利用漏洞对代码产生威胁
    CSRFProtect(app)

    # 注册蓝图

    # app.register_blueprint(api,url_prefix='/api/v1.0')
    from .api_1_0 import api
    app.register_blueprint(blueprint=api)

    return app

 第三方扩展

# 第三方插件
from flask_sqlalchemy import SQLAlchemy #数据库
from flask_migrate import Migrate,MigrateCommand  #迁移文件
db = SQLAlchemy()
migrate = Migrate()
def init_exts(app):
    db.init_app(app)
    migrate.init_app(app,db)

 

 启动文件

# coding:utf-8
from ihomeinner import create_app
from ihomeinner.exts import db
from flask_migrate import Migrate,MigrateCommand
from flask_script import Manager

# 创建flask的应用对象
app = create_app('develop')  #对应ihomeinner的__init__的配置信息导入 这个是用的开发环境信息配置
manager = Manager(app)
manager.add_command('db',MigrateCommand)

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

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flask-Redis 中,可以使用以下配置项对 Redis 进行配置: - `REDIS_URL`: Redis 服务器的 URL。 - `REDIS_HOST`: Redis 服务器的主机名,默认为 `localhost`。 - `REDIS_PORT`: Redis 服务器的端口号,默认为 `6379`。 - `REDIS_PASSWORD`: Redis 服务器的密码,默认为 `None`。 - `REDIS_DB`: Redis 服务器的数据库编号,默认为 `0`。 - `REDIS_UNIX_SOCKET_PATH`: Redis 服务器的 UNIX 域套接字路径,默认为 `None`。 - `REDIS_CHARSET`: Redis 服务器的字符集,默认为 `utf-8`。 - `REDIS_ERRORS`: Redis 服务器的错误级别,默认为 `strict`。 - `REDIS_DECODE_RESPONSES`: 是否自动解码 Redis 中的数据,默认为 `False`。 - `REDIS_SOCKET_TIMEOUT`: Redis 服务器的连接超时时间,默认为 `None`。 - `REDIS_SOCKET_CONNECT_TIMEOUT`: Redis 服务器的连接建立超时时间,默认为 `None`。 - `REDIS_RETRY_ON_TIMEOUT`: 是否在连接超时时自动重试,默认为 `False`。 - `REDIS_MAX_CONNECTIONS`: 连接池中的最大连接数,默认为 `None`。 - `REDIS_HEALTH_CHECK_INTERVAL`: 连接池中连接的健康检查间隔时间,默认为 `None`。 以上配置项可以根据需要进行设置。在 Flask-Redis 中,可以通过在 Flask配置中设置 `REDIS_SETTINGS` 来统一配置 Redis 实例。例如: ```python REDIS_SETTINGS = { 'host': '127.0.0.1', 'port': 6379, 'db': 0, 'decode_responses': True, } app = Flask(__name__) app.config['REDIS_SETTINGS'] = REDIS_SETTINGS redis_store = FlaskRedis(app) ``` 在上面的例子中,`REDIS_SETTINGS` 是一个字典,包含了 Redis 实例的配置项。通过将其设置为 Flask配置项,可以在创建 Redis 实例时自动使用这些配置

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值