创建app时,需要将自定义的转换器键入到flask转换器中,但若将转换器放在创建app函数中的后面,则会初见转换器不存在的错误,将注册转换器提前注册则可解决:
def creat_app(config_name):
"""
根据不同的环境,配置app
:param config_name: str类型 可选{"development","produce"}
:return:
"""
app = Flask(__name__)
app.url_map.converters["re"] = Reconverter # 将自定义的转换器注册到flask中
# 选择不同环境的config
config_type = CONFIG_MAP.get(config_name)
# 注册配置
app.config.from_object(config_type)
# app被创建时绑定app
db.init_app(app)
# 全局变量声明
global redis_store
# 创建redis链接对象
redis_store = redis.StrictRedis(host=config_type.REDIS_HOST, port=config_type.REDIS_PORT) # host为链接的主机,port为链接的端口号,在config中配置
from ihome.api_v1 import api # 放在函数中,解决循环导入的问题
# from ihome.web_html import web_html
# 注册蓝图
app.register_blueprint(api)
# app.register_blueprint(web_html)
# csrf保护
CSRFProtect(app)
# app.url_map.converters["re"] = Reconverter # 将自定义的转换器注册到flask中
# 配置session,将session数据保存在redis中
Session(app)
setup_log() # 创建app时启动log文件
return app