如果所有的配置文件全部揉在一个文件中,如下所示,会很复杂
main.py
from flask import Flask,session
from flask_sqlalchemy import SQLAlchemy
from redis import StrictRedis
from flask_session import Session
from datetime import timedelta
from flask_wtf.csrf import CSRFProtect
app = Flask(__name__)
class Config(object):
DEBUG = True
SECRET_KEY = '12adsfa1'
#配置数据库连接参数
SQLALCHEMY_DATABASE_URI = 'mysql://root:12345678@localhost:3306/demo'
SQLALCHEMY_MODIFICATIONS = False
#配置redis数据库参数
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
SESSION_TYPE = 'redis'
SESSION_REDIS = StrictRedis(host=REDIS_HOST,port=REDIS_PORT)
SESSION_USE_SIGNER = True
PERMANENT_SESSION_LIFETIME = timedelta(days=2)
app.config.from_object(Config)
db = SQLAlchemy(app)
redis_store = StrictRedis(host=Config.REDIS_HOST,port=Config.REDIS_PORT,decode_responses=True)
Session(app)
CSRFProtect(app)
@app.route('/')
def index():
redis_store.set("name","laowang")
print(redis_store.get("name"))
session["name"] = "zhangsan"
print(session.get('name'))
return 'HelloWorld!'
if __name__ == '__main__':
app.run(port=5001)
分拆
1.拆配置文件
2.拆初始化文件
3.拆解视图
目录结构如下
1.拆配置文件
#config.py
from datetime import timedelta
from redis import StrictRedis
class Config(object):
DEBUG = True
#配置密钥
SECRET_KEY = '12adsfa1'
#配置mysql数据库相关参数
SQLALCHEMY_DATABASE_URI = 'mysql://user:password@localhost:3306/databasename'
SQLALCHEMY_MODIFICATIONS = False
#配置redis相关参数
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
#配置session数据库类型
SESSION_TYPE = 'redis'
SESSION_REDIS = StrictRedis(host=REDIS_HOST,port=REDIS_PORT)
#配置signer类型
SESSION_USE_SIGNER = True
#配置会话超时时间
PERMANENT_SESSION_LIFETIME = timedelta(days=2)#seconds=5
class ProductConfig(Config):
pass
class TestConfig(Config):
pass
config_dict = {
'product': ProductConfig,
'test': TestConfig,
'default': Config
}
2.拆初始化信息
在和main.py相同目录下新建一个info模块,info模块里面,新建一个modules模块,里面包含index(首页)视图模块,以后也可以包含其他新建视图模块
#info/__init__.py
from flask import Flask
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import CSRFProtect
from redis import StrictRedis
from config import config_dict
redis_store = None
def create_app(config_name):
app = Flask(__name__)
config = config_dict.get(config_name)
app.config.from_object(config)
db = SQLAlchemy(app)
global redis_store
redis_store = StrictRedis(host=config.REDIS_HOST,port=config.REDIS_PORT,decode_responses=True)
Session(app)
CSRFProtect(app)
#避免循环导包,如果放在文件最开头会导致循环导包,可自行尝试
from .modules.index import index_blue
#注册蓝图
app.register_blueprint(index_blue)
return app
3.拆解视图
#modules/index/__init__.py
from flask import Blueprint
index_blue = Blueprint('index_blue',__name__)
from . import views
#modules/index/views.py
from . import index_blue
from info import redis_store
@index_blue.route('/')
def index():
redis_store.set("name","laowang")
#session["name"] = "zhangsan"
#print(session.get('name'))
print(redis_store.get("name"))
return 'HelloWorld!'