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 Sessionapp = Flask(__name__)class Config():# 调试信息DEBUG = TrueSECRET_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 timedeltafrom redis import StrictRedisclass Config():# 调试信息DEBUG = TrueSECRET_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) # 设置签名过期时间# 开发环境配置信息
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 Sessionfrom config import Config, config_dictdef create_app(config_name):app = Flask(__name__)# 获取config配置config = config_dict.get(config_name)app.config.from_object(config)# 创建数据库关联对象并关联appdb = 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保护appCSRFProtect(app)return app
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_dictdef create_app(config_name):app = Flask(__name__)# 获取config配置config = config_dict.get(config_name)app.config.from_object(config)# 创建数据库关联对象并关联appdb = 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保护appCSRFProtect(app)# 注册蓝图from info.modules.index import index_blueapp.register_blueprint(index_blue)return app