Python进阶(四十九)初识Flask Blueprint_python blueprint

不同蓝本分别位于不同的Python包中,而蓝图的创建则位于Python包下的__init__.py文件。不同Python包下的views.py文件则对应不同蓝本下的路由。

在示例项目中,auth授权包下的蓝本创建代码如下:

from flask import Blueprint

auth = Blueprint('auth', __name__)

from . import forms, views

上面的蓝本创建语句创建了名为“auth”的蓝本。之所以将from . import forms, views导包语句置于__init__.py末尾,是为了避免循环导入依赖,因为在views.py中还要导入蓝本auth。

Views.py文件内容如下:

from flask import request, flash, render_template, redirect, url_for
from . import auth
from web_flask.app.dal_pymysql import DataManager

# 管理员登录
@auth.route('/login', methods=['POST'])
def login():
    form = request.form
    # 由于request中的form参数以字典的形式存在,故以下语句等价
    uname = request.form['username']
    pwd = request.form['password']

在这里使用from . import auth方式导入所需蓝本。蓝本的注册语句则置于项目创建的工厂方法中,注册代码如下:

from .auth import auth as auth_blueprint
from .main import main as main_blueprint
# 注册蓝本 url\_prefix='/admin'
app.register_blueprint(auth_blueprint,)
app.register_blueprint(main_blueprint, static_folder='static')
return app

在蓝本注册函数register_blueprint()中,第一个参数为所注册的蓝本名称。当我们在应用对象上注册一个蓝图时,需要指定一个url_prefix关键字 参数(这个参数默认是/)。其余可增参数详见Flask官方文档。

三、注意事项

注意:在蓝本中编写视图函数views.py主要有两点不同:

  • 和前面的路由程序一样,路由修饰器由蓝本提供;
  • url_for() 函数的用法不同。

你可能还记得,url_for() 函数的第一个参数是路由的端点名,在程序的路由中,默认为视图函数的名字。例如,在单脚本程序中,index() 视图函数的URL 可使用url_for('index') 获取。

在蓝本中就不一样了,Flask 会为蓝本中的全部端点加上一个命名空间,这样就可以在不同的蓝本中使用相同的端点名定义视图函数,而不会产生冲突。命名空间就是蓝本的名字(Blueprint 构造函数的第一个参数),所以视图函数index() 注册的端点名是main.index,其URL 使用url_for(‘main.index’) 获取。

url_for()函数还支持一种简写的端点形式,在蓝本中可以省略蓝本名,例如url_for(‘.index’)。在这种写法中,命名空间是当前请求所在的蓝本。这意味着同一蓝本中的重定向可以使用简写形式,但跨蓝本的重定向必须使用带有命名空间的端点名。

如果不使用url_for(‘main.index’) 或url_for(‘.index’) 的形式,在项目运行过程中就会提示请求的URL错误。

计算机网络

  • HTTP 缓存

  • 你知道 302 状态码是什么嘛?你平时浏览网页的过程中遇到过哪些 302 的场景?

  • HTTP 常用的请求方式,区别和用途?

  • HTTPS 是什么?具体流程

  • 三次握手和四次挥手

  • 你对 TCP 滑动窗口有了解嘛?

  • WebSocket与Ajax的区别

  • 了解 WebSocket 嘛?

  • HTTP 如何实现长连接?在什么时候会超时?

  • TCP 如何保证有效传输及拥塞控制原理。

  • TCP 协议怎么保证可靠的,UDP 为什么不可靠?

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

算法

  • 链表

  • 字符串

  • 数组问题

  • 二叉树

  • 排序算法

  • 二分查找

  • 动态规划

  • BFS

  • DFS

  • 回溯算法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值