Flask基础二

Flask基础二

蓝图的引入

虽然一个py文件确实能够写完所有的flask功能,从路由到视图到数据库,但是实际上并没有任何实际项目这么做,原因在于管理起来非常不方便,作为一个成熟的框架怎么可能会存在管理混乱的现象,所以我们先简单的看视图py文件和运行py文件进行分离的问题

运行py文件: main_func文件

from flask import Flask

app = Flask(__name__)

import the_view # 导入的时候就会执行

if __name__ == '__main__':
    app.run()

上面是主运行文件,创建一个app后应该绑定视图的,但是这既然要视图和主程序进行分离,则将视图写成一个新的py文件进行导入

视图文件: the_view

from other_file.main_func import app

@app.route('/')
def show():
    return '显示'

视图函数中没有app,则需要从主文件中进行导入,看起来没问题,导入之后就能够进行注册视图

实际上启动之后并不会成功显示,main_func运行的时候,创建了一个app对象后继续向下运行,运行到import the_view语句的时候就将视图文件的代码加载进来并执行

此时执行视图文件,那么视图文件的第一条就是导入主文件,好的,在视图文件执行第一行的时候就把主文件加载进来执行,此时主文件又执行

from flask import Flask

app = Flask(__name__)

那么问题就出现了,这里再一次实例化了一个app对象,当然还没有执行完,后面继续执行导入视图文件,但是因为python在底层就已经设定了防止循环导入的设置,所以种里导入操作不成功,执行完成,所以种类就算是把视图文件的第一行执行完了,接下来视图文件就用新的app对象进行注册函数

视图文件执行完成后,主文件的导入视图文件语句执行完成,继续向下执行,当执行到app.run()的时候问题就来了,主文件中的app实际上与在导入视图文件时注册的app并不是同一个,那么用这个app启动的服务器并没有把视图注册进来,从而不管怎么调整都是404

这里就是因为

app = Flask(__name__)

属于全局变量,从而导致只要这个py文件被调用,这个对象就会重新创建,所以就导致注册的app与启动服务器的app并不一致,flask为了解决这种问题使用了蓝图

蓝图

蓝图的使用分为三步,第一步导入库,第二步实例化蓝图对象,第三步绑定对应的视图

那么如果是出现功能分离,不能在一个页面中进行显示的话,那么蓝图也会被其他py文件进行导入,这种导入就是单向的导入

主py文件

from flask import Flask

app = Flask(__name__)

# 主应用中进行蓝图的注册
from other_file.the_view import bp # 把对应的蓝图进行导入,因为我是放在了other_file文件里面
app.register_blueprint(bp)

if __name__ == '__main__':
    app.run()

视图py文件

from flask import Blueprint

bp = Blueprint('the_view', __name__)

@bp.route
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值