flask基础(3)

flask中,在默认情况下,一个.py文件与Django中的project是同级的(或一个Flask对象),即这一个Flask对象中包含了视图(可以有多个)、路由、配置、启动等多个操作,且不同py文件之间的配置是独立的。

flask中的蓝图
在不使用蓝图的情况下对模块进行分类的方法:

①将主函数中的app导入到其他分模块中,分模块中定义各自的路由和视图函数,但主模块启动时并不知晓分模块的存在,因此还需将分模块的函数导入主模块,会引发import循环嵌套问题(此问题及python中import机制会在python基础系列博客中详细描述),可以在主模块的视图函数内部将分模块的函数导入解决循环嵌套问题(由此引发的问题是,必须先访问主模块中的视图函数才可以将分模块中的视图函数导入进而访问);
②使用装饰器,将分模块的函数导入主模块后,app.route(’/login’)(login),将装饰器当作函数引用,在主模块中进行路由的配置,即只是在分模块中定义视图函数而不进行路由的配置;

蓝图:

蓝图就是一个存储操作路由映射方法的容器,主要用来实现客户端请求和URL相互关联的功能,在flask中,使用蓝图实现模块化应用的功能。

蓝图的使用
①在分模块中导入蓝图 from flask import Blueprint
定义蓝图 蓝图对象名 = Blueprint('蓝图名',__name__)
注册路由 @蓝图对象名.route('/index')
②在主模块中导入 from 分模块 import 蓝图对象
注册蓝图 app.register_blueprint(蓝图对象名, url_prefix='/admin')
此时对于分模块中视图函数的访问url /admin/index
:①蓝图定义时,蓝图对象名蓝图名可以相同,蓝图对象名用于注册路由和在主模块中注册蓝图,蓝图名用于反向解析url_for(‘蓝图名.函数名’);
②蓝图对象名不要跟其下的路由函数名相同,否则导入会出现错误。

蓝图目录管理
在实际应用中,一般将模块单独划分一个包(包与主模块同级,主模块即创建Flask对象的.py文件),在包下的init文件中定义蓝图,在views中定义函数与路由,如图所示;
蓝图目录
views.py文件在这里插入图片描述
main.py文件(主模块)在这里插入图片描述
init.py文件在这里插入图片描述

:①在导入时.代表当前模块,位于__init__文件中的蓝图对象可以直接不使用文件名只使用包名导入;
②init文件中需要将views中的视图函数导入,否则对应关系不存在,注意此处导入必须放置于蓝图对象创建之下,否则依然存在循环嵌套。

flask中模板的加载流程

①app创建时会从Flask注册函数中读取template_folder(参前述注册配置),如果没有设置,默认是与主模块同级的templates,作为全局jinja_loader;
②render_template函数会首先访问app的全局jinja_loader,从中读取模板路径;
③访问不到就会循环访问所有注册蓝图的jinja_loader(即蓝图创建时设置的template_folder,绝对路径一般不使用,相对路径相对于所在模块),但这里的访问是无序的,即其并不分辨是哪个蓝图的设置,也并不区分访问到的是哪个蓝图文件夹下的templates;
④将路径与render函数后的文

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值