Python进阶(四十九)-初识Flask Blueprint

Python进阶(四十九)-初识Flask Blueprint

前言

  在进行Python Web开发时选择Flask框架。项目模块划分阶段,使用Blueprint(这里暂且称之为“蓝本”)。Blueprint通过把实现不同功能的module分开,从而把一个大的application分割成各自实现不同功能的module。在一个Blueprint中可以调用另一个blueprint的view function, 但要加相应的blueprint名。
  Blueprint还有其他好处,其本质上来说就是让程序更加松耦合,更加灵活,增加复用性,提高查错效率,降低出错概率。
在具体项目开发过程中,不同蓝本分别对应不同的功能模块。例如auth授权模块和项目主模块。

实例讲解

  下面以实际项目开发为例,项目结构图如下图所示:

  不同蓝本分别位于不同的Python包中,而蓝图的创建则位于Python包下的init.py文件。不同Python包下的views.py文件则对应不同蓝本下的路由。
  在示例项目中,auth授权包下的蓝本创建代码如下:

from flask import Blueprint

auth = Blueprint(‘auth‘, __name__)

from . import forms, views
  • 1
  • 2
  • 3
  • 4
  • 5

  上面的蓝本创建语句创建了名为“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‘]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

  在这里使用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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  在蓝本注册函数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错误。

原文地址:https://www.cnblogs.com/zzzxing/p/12441967.html

时间: 2024-10-03 22:15:31

Python进阶(四十九)-初识Flask Blueprint的相关文章

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据 ??matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. ??它的文档相当完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序.因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定. ??在Linux下比较著名的数据图工具还有gnuplot

Python进阶(四十)-数据可视化の使用matplotlib进行绘图

Python进阶(四十)-数据可视化の使用matplotlib进行绘图 前言 ??matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包.我将在这篇文章中介绍matplotlib API的核心对象,并介绍如何使用这些对象来实现绘图.实际上,matplotlib的对象体系严谨而有趣,为使用者提供了巨大的发挥空间.用户在熟悉了核心对象之后,可以轻易的定制图像.matplotlib的对象体系也是计算机图形学的一个优秀范例.即使你不是Python程序员,你也可以从文中

Python进阶(三十四)-Python3多线程解读

Python进阶(三十四)-Python3多线程解读 线程讲解 ??多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度. 程序的运行速度可能加快. 在一些等待的任务实现上如用户输入.文件读写和网络收发数据等,线程就比较有用了.在这种情况下我们可以释放一些珍贵的资源如内存占用等等. ??线程在执行过程中与进程还是有区别的.每个独立

Python进阶(三十六)-Web框架Django项目搭建全过程

Python进阶(三十六)-Web框架Django项目搭建全过程 ??IDE说明: Win7系统 Python:3.5 Django:1.10 Pymysql:0.7.10 Mysql:5.5 ??Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! Django 特点 强大的数据库功能 用python的类继承,几行代码就可以拥有一个丰富,动态的数据库操作接口(API),如果需要你也能执行SQL语句. 自带的强大的后台功能 几行简单的代码就让你的网

无限互联奖学金文章连载北京总部四十九期胡梦川 第一篇

无限互联奖学金文章连载北京总部四十九期胡梦川 第一篇: 今天是来到无限互联的第四天,严格来说已经第六天了,刚来就是开班典礼,给人一种很好的氛围.老师讲了很多关于以后学习的技巧和规定,我的第一感觉是,比备战高考还要严格,不过这才能体现一个组织的负责任.正式开讲才感觉到这个班级的大神无处不在,不努力根本赶不上,就是这个学习氛围和高强度的练习很重要.多用心你才能感觉到有些事其实很简单.关于学习时间大家基本都是一天不动的在敲代码,等于给自己一个机会吧.时间飞逝,抓住机会才重要.刚来第一周,感受最深就是好

Python进阶(三十五)-Fiddler命令行和HTTP断点调试

Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令 ??上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的session不是同一个概念,这里的每条HTTP请求都称为一个session).界面中能够看到Fiddler抓取的全部HTTP请求.而为了更加方便的管理全部的session, Fiddler提供了一系列内置的函数用于筛选和操作这些session(习惯命令行操作Linux的童鞋应该能够感受到这会有多么方便

QT开发(四十九)——数据库用户接口层

QT开发(四十九)--数据库用户接口层 用户接口层主要包括Qt SQL模块中的QSqlQueryModel.QSqlTableModel.QSqlRelationalTableModel.用户接口层的类实现了将数据库中的数据链接到窗口部件上,是使用模型/视图框架实现的,是更高层次的抽象,即便不熟悉SQL也可以操作数据库.需要注意的是,在使用用户接口层的类之前必须先实例化QCoreApplication对象. QT中使用了自己的机制来避免使用SQL语句,提供了更简单的数据库操作及数据显示模型,分别

AngularJS进阶(四十)创建模块、服务

AngularJS进阶(四十)创建模块.服务 学习要点 使用模块构架应用 创建和使用服务 为什么要使用和创建服务与模块? 服务允许你打包可重用的功能,使之能在此应用中使用. 模块允许你打包可重用的功能,使之能跨应用使用. 一.应用程序模块化 先看看一个没有模块化的程序 <!DOCTYPE> <!-- use module --> <html ng-app="exampleApp"> <head> <title>Angluar

第四十九象 壬子

第四十九象 壬子 谶 曰山谷少人口 欲剿失其巢帝王称弟兄 纷粉是英豪 颂 曰一个或人口内啼分南分北分东西六爻占尽文明见棋布星罗日月济 金圣叹注解:久分必合,久合必分,理数然也,然有文明之象,当不如割据者之纷扰也. 推背图网解: 解图八把刀,显然八位能人各居一方.刀非指武力统治,下文有“文明”象,这里刀在八卦中表兑卦,兑为口,显然是通过舆论宣传法律.社会公德在治理各自的“行政区”. 解谶山谷少人口 欲剿失其巢——“谷”字少了人.口剩下“八”:“剿”少了巢剩下“刀”旁,暗示割据自治有八方.  帝王称