flask蓝图模块

flask blueprint模块

更改框架为蓝图昨天终于完成,还是挺开心的,下面总结一下自己在其中遇到许多问题。

先上图片

mcc

这是blueprint的一个框架结构

#__init__.py(运行的接口)
# -*- coding: utf-8 -*-
from flask import Flask , render_template
from flask_mail import Mail
from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
import mysql.connector
import sys , os
from flask_login import LoginManager


mail=Mail()
moment=Moment()
db=SQLAlchemy()
login_manager=LoginManager()
app = Flask(__name__)



from .func import *
def create_app():
    #蓝图注册
    from . import auth , main

    app.register_blueprint(auth.auth , subdomain='auth')
    app.register_blueprint(main.main , subdomain='main')




    #配置模块
    dir_path = os.path.abspath(os.path.dirname(__file__))
    os.environ['mcc_config'] = os.path.join(dir_path , 'config\\development.py')
    instance_path = os.path.join(dir_path , 'instance\\config.py')
    app.config.from_envvar('mcc_config')
    app.config.from_pyfile(instance_path)


    #模型初始化
    mail.init_app(app)
    db.init_app(app)
    moment.init_app(app)
    login_manager.init_app(app)
    @login_manager.user_loader
    def load_user(id):
        return User.query.get(int(id))


    @login_manager.unauthorized_handler
    def unauthorized():
        return render_template("index.html")

    #数据库初始化
    with app.app_context():
        db.create_all()
        dic=dict()
        dic['name']='root'
        dic['password']='root'
        dic['email']=None
        dic['confirmed']=True
        dic['pri']=2
        db_user_push(dic)
    
    return app

其实关于蓝图框架没有太多可说的,这次更改框架还是挺顺利的,唯一遇到的一个问题是关于python包循环导入的问题,还是学长帮忙解决的。下面重点说一下python包循环导入问题。
首先python包导入的流程是由运行的python文件出发,遇到包导入就按路径查找包,再分析另一个包中需要导入的模块,也就是说此时运行的文件下面的变量函数都是没有初始化的,不能被调用,如果被调用则会出现循环导入的问题。
简单来说假设运行A文件,import B文件中的函数或变量,然后B文件import C文件中的变量,C又import A文件中的变量,而A又没有初始化变量,所以会报错,所以你会看到许多书上将一下可能导致问题的包尽量靠近调用的地方才去import,关于这一点,我上面的代码中就有体现

from .func import *
def create_app():
#蓝图注册
from . import auth , main
app.register_blueprint(auth.auth , subdomain=‘auth’)
app.register_blueprint(main.main , subdomain=‘main’)
我是在函数中import的一个包的变量

总结:ok吧,最近挺忙的,只说到这里了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值