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


    1. 在app.py文件中
    1. from datetime import timedelta
    2. from flask_wtf.csrf import CSRFProtect
    3. from flask import Flask, session
    4. from flask_sqlalchemy import SQLAlchemy
    5. from redis import StrictRedis
    6. from flask_session import Session
    7. app = Flask(__name__)
    8. class Config():
    9. # 调试信息
    10. DEBUG = True
    11. SECRET_KEY = 'fjsiogkgnmdinging'
    12. # 数据库信息
    13. SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/info36'
    14. SQLALCHEMY_TRACK_MODIFICATIONS = False
    15. # redis配置
    16. REDIS_HOST = '127.0.0.1'
    17. REDIS_PORT = 6379
    18. # session配置
    19. SESSION_TYPE = 'redis' # 设置session的存储类型
    20. SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT) # 指定session存储的服务器
    21. # SESSION_USE_SIGNER = True # 设置签名存储
    22. PERMANENT_SESSION_LIFETIME = timedelta(days=1) # 设置签名过期时间
    23. app.config.from_object(Config)
    24. # 创建数据库关联对象并关联app
    25. db = SQLAlchemy(app)
    26. # 创建redis对象
    27. # 当 decode_responses 设置为 True 时,Redis 返回的字符串数据将会被解码为 Python 字符串类型。这样可以方便地处理 Redis 中存储的文本数据。
    28. # 而当 decode_responses 设置为 False(默认值)时,Redis 返回的字符串数据将会以字节字符串(bytes)的形式返回。
    29. # 这在处理二进制数据或者需要与其他 Redis 客户端进行交互时可能更为合适
    30. redis_store = StrictRedis(host=Config.REDIS_HOST, port=Config.REDIS_PORT, decode_responses=True)
    31. # 创建session对象
    32. Session(app)
    33. # 使用CSRFProtect保护app
    34. CSRFProtect(app)
    35. @app.route('/', methods=['GET', 'POST'])
    36. def hello_world():
    37. # 测试redis存取数据
    38. redis_store.set("name", "laowang")
    39. print(redis_store.get("name"))
    40. # 测试session存取
    41. session["name"] = "zhangsan"
    42. print(session.get("name"))
    43. return "helloworld"
    44. if __name__ == '__main__':
    45. app.run()
    2.这样写在一起不方便后续开发,所以进行抽取
            1.抽取配置类,将配置信息放入项目根目录下的config.py文件中,然后在导入app.py文件中。
    1. from datetime import timedelta
    2. from redis import StrictRedis
    3. class Config():
    4. # 调试信息
    5. DEBUG = True
    6. SECRET_KEY = 'fjsiogkgnmdinging'
    7. # 数据库信息
    8. SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@localhost:3306/info36'
    9. SQLALCHEMY_TRACK_MODIFICATIONS = False
    10. # redis配置
    11. REDIS_HOST = '127.0.0.1'
    12. REDIS_PORT = 6379
    13. # session配置
    14. SESSION_TYPE = 'redis' # 设置session的存储类型
    15. SESSION_REDIS = StrictRedis(host=REDIS_HOST, port=REDIS_PORT) # 指定session存储的服务器
    16. # SESSION_USE_SIGNER = True # 设置签名存储
    17. PERMANENT_SESSION_LIFETIME = timedelta(days=1) # 设置签名过期时间
    18. # 配置默认的log等级
    19. LEVEL_NAME = logging.DEBUG
    20. # 开发环境配置信息
    21. class DevelopConfig(Config):
    22. pass
    23. # 生产(线上)环境配置信息
    24. class ProductConfig(Config):
    25. DEBUG = False
    26. # 测试环境配置信息
    27. class TestConfig(Config):
    28. pass
    29. # 提供一个统一的访问入口
    30. config_dict = {
    31. "develop": DevelopConfig,
    32. "product": ProductConfig,
    33. "test": TestConfig
    34. }
            2.将初始化信息抽取,在项目根目录下创建一个包,此包名与项目名相关。并在init.py文件中将初始化信息放入,主要就是创建一个create_app方法方便调用
    1. from flask_wtf.csrf import CSRFProtect
    2. from flask import Flask
    3. from flask_sqlalchemy import SQLAlchemy
    4. from redis import StrictRedis
    5. from flask_session import Session
    6. from config import Config, config_dict
    7. def create_app(config_name):
    8. app = Flask(__name__)
    9. # 获取config配置
    10. config = config_dict.get(config_name)
    11. app.config.from_object(config)
    12. # 调用日志方法,记录程序运行信息
    13. log_file(config.LEVEL_NAME)
    14. # 创建数据库关联对象并关联app
    15. db = SQLAlchemy(app)
    16. # 创建redis对象
    17. # 当 decode_responses 设置为 True 时,Redis 返回的字符串数据将会被解码为 Python 字符串类型。这样可以方便地处理 Redis 中存储的文本数据。
    18. # 而当 decode_responses 设置为 False(默认值)时,Redis 返回的字符串数据将会以字节字符串(bytes)的形式返回。
    19. # 这在处理二进制数据或者需要与其他 Redis 客户端进行交互时可能更为合适
    20. redis_store = StrictRedis(host=config.REDIS_HOST, port=config.REDIS_PORT, decode_responses=True)
    21. # 创建session对象
    22. Session(app)
    23. # 使用CSRFProtect保护app
    24. CSRFProtect(app)
    25. return app
    26. def log_file(LEVEL_NAME):
    27. # 设置日志的记录等级,常见的有四种,DEBUG
    28. logging.basicConfig(level=LEVEL_NAME) # 调试debug级
    29. # 创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限
    30. file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024 * 1024 * 100, backupCount=10)
    31. # 创建日志记录的格式日志等级输入日志信息的文件名行数日志信息
    32. formatter = logging.Formatter('%(levelname)s %(filename)s:%(lineno)d %(message)s')
    33. # 为刚创建的日志记录器设置日志记录格式
    34. file_log_handler.setFormatter(formatter)
    35. # 为全局的日志工具对象(flask app使用的)添加日志记录器
    36. logging.getLogger().addHandler(file_log_handler)
            3.视图函数的抽取,视图函数要放入对应模块中的init文件中,    
    1. ########### 1.在模块包index下的init文件中创建 ##################
    2. from flask import Blueprint
    3. # 创建蓝图对象
    4. index_blue = Blueprint('/index',__name__)
    5. # 引入views
    6. from info.modules.index import view
    1. #################2.在view文件中使用######################
    2. from info.modules.index import index_blue
    3. @index_blue.route('/', methods=['GET', 'POST'])
    4. def hello_world():
    5. return "helloworld"
    1. ###################3. 在项目文件中的init.py中注册蓝图#############
    2. from flask_wtf.csrf import CSRFProtect
    3. from flask import Flask
    4. from flask_sqlalchemy import SQLAlchemy
    5. from redis import StrictRedis
    6. from flask_session import Session
    7. from config import config_dict
    8. def create_app(config_name):
    9. app = Flask(__name__)
    10. # 获取config配置
    11. config = config_dict.get(config_name)
    12. app.config.from_object(config)
    13. # 创建数据库关联对象并关联app
    14. db = SQLAlchemy(app)
    15. # 创建redis对象
    16. # 当 decode_responses 设置为 True 时,Redis 返回的字符串数据将会被解码为 Python 字符串类型。这样可以方便地处理 Redis 中存储的文本数据。
    17. # 而当 decode_responses 设置为 False(默认值)时,Redis 返回的字符串数据将会以字节字符串(bytes)的形式返回。
    18. # 这在处理二进制数据或者需要与其他 Redis 客户端进行交互时可能更为合适
    19. redis_store = StrictRedis(host=config.REDIS_HOST, port=config.REDIS_PORT, decode_responses=True)
    20. # 创建session对象
    21. Session(app)
    22. # 使用CSRFProtect保护app
    23. CSRFProtect(app)
    24. # 注册蓝图
    25. from info.modules.index import index_blue
    26. app.register_blueprint(index_blue)
    27. return app

  • 相关阅读:
    前端 js 深拷贝遇到循环拷贝如何解决?
    TCP Window Full & TCP Zero Window
    编写程序实现乐手弹奏乐器(多态)
    Jenkins在Linux环境下的安装与配置
    【网络编程】网络原来这么简单(更新中)
    我用的是哪个python
    谐云携手EMQ ,打造车联网平台联合解决方案
    odoo Web Controllers 学习总结
    安全算法 - 国密算法
    Linux学习之MySQL备份
  • 原文地址:https://blog.csdn.net/qq_44906497/article/details/133863658