7.大型网站结构的拆分

如果所有的配置文件全部揉在一个文件中,如下所示,会很复杂
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!'

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值