热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何理解flask中的蓝本?

php中文网(www.php.cn)提供了最全的编程技术基础教程,介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP,MySQL等各种编程语言的基础知识。同时本站中也提供了大量的在线实例,通过实例,您可以更好的学习编程。..

回复内容:

恩,理解「蓝本」对于没有接触其他Web编程实现的Python+Flask新手而言,是一个不好迈过的坎儿。

我得用「比喻」的方式穿插讲述一下「蓝本」,方便你更好理解,问这个问题估计是新手,所以我啰嗦点好了。

首先,提一下概念,「蓝本」的对应官方词汇是「Blueprint」,中译还有「蓝图」这种叫法,是一种东西。
你去餐馆吃饭,点一些菜,你一定吃过「麻辣香锅」这种东西。你可以点一些杂七杂八的菜,选好口味,之后一个碗儿端上来,你吃的很滋味,并且也会觉得这种「一锅端」的方式很好,毕竟不会一道吃完等下一道啊,一起上来热乎乎的多好。并且吃的很少的时候,一点点的菜单独用一个碗儿装也是有点「装逼」的事情。
假如你一个人一己之力要写一个BBS(论坛系统)的话,上面的这个例子,其真实写照是初期功能很弱时,可能页面不多,实现的功能也很少。可能首页就是一个帖子列表,允许用户发布帖子,并且不涉及登录退出、会员等级、权限管理等,你想着,那是后面再说的事情。于是,你将网站主干代码写在一个run.py文件里,让网站成功的跑了起来,你觉得这样实现很方便,快捷。
如果我让你这个时候把run.py理一下,能独立出来的独立成其他的文件,之后在run.py里导入,你要骂我「装逼」了,没事找事。是的,「蓝本」并不适合用来构建想当简单的网站系统。

然而,你胃口变大了,你也有了好朋友,你们要一起去吃饭。于是你遇到一些问题:
  1. 你的朋友不喜欢吃某些东西,但你喜欢吃。你朋友喜欢吃的一些东西,你不喜欢吃。
  2. 人多了,点的东西多了,你们想如果吃不完可以打包明天吃,但是你们打包还是要挑一些菜打包的,毕竟有些菜隔夜就味道不好,容易坏掉。
  3. 你和你的朋友都想先吃一种东西,然后再吃一种东西。比如先吃点荤的,然后吃点素的解解荤。
以上,如果你们还去吃「麻辣香锅」,就都不开心了,你想想看。
类似的,当你的BBS系统越来越复杂,有了登录退出、会员等级、权限管理等等功能后,问题迎面而来:
  1. run.py文件肯定越来越大,代码行数越来越多。你网站所有的路由写在一个文件里,功能也在一个文件里,很容易出现错误,并且难以定位。当然,你如果没实战经验,确实不能切身体会这点。那么我说另一个显而易见的问题:import(导入)和config(配置)一般写在头部,你的新路由按顺序怎么也得写在几百行开外的地方,于是你编程时一下看代码文件最上面,一下拖到底部继续写,这就够「操蛋」的了。
  2. 大型网站一定是多人编程,如果此刻安排你做登录退出功能,你的朋友做权限管理功能,那么老板当然不容忍你干完你朋友才开工,一起开干啊!可是此时只有run.py一个文件,没错,你和你的基友可以各自拷贝一份run.py各自开始写,结果你的代码从第100行开始写,你的朋友也从100行开始写,然后你们还各自在头部import了一些新东西。等写好了,怎么办?线上就一个run.py,这下「糟糕」了,苦苦「合并」代码吗?这更「操蛋」了。如果10个人写网站呢?——「蛋蛋艹碎了」
所以,你此刻第一反应当然是「麻辣香锅」吃不成了,这「一碗菜是一碗菜」的方式是最佳的解决方案,爱吃什么吃什么,爱打包哪碗直接装起来,不用拿着筷子挑。
当你利用Python+Flask构建一个网站时,人为的提炼一些代码独立成文件是「不妥」的方式,你需要Flask本身给予一些支持,于是「蓝本」出现了。

「蓝本」允许你将不同路由分开,提供一些「规范(标准)」,并且附带了很多好处。你可以要求商家不同的菜上来装不同的盘子,就像你也可以要求「蓝本」针对不同路由应用不同静态资源,导致不同的URL出现不一样的网站界面(否则前端CSS就混杂了)。
「蓝本」使得你和基友一起工作时不会再有上面的麻烦事,你改你的A文件,他改他的B文件,回头各自提交各自的,多好。
「蓝本」让你做另一个程序时,如果那个程序也有登录退出,理想情况下你甚至可以直接将BBS负责登录退出的部分直接挪过去用,这远比直接从一个run.py里复制出代码现实的多,要知道即使一个登录退出的功能,你在一个run.py里实现,代码会散落在各处的。

「蓝本」还有其他好处,其实本质上来说就是让程序更加松耦合,更加灵活,增加复用性,提高查错效率,降低出错概率。

以上,我所说的针对「小白」新手,如果你有一定的实践经验,官方的文档写得更准确些:使用蓝图的模块化应用

希望我的回答帮你绕好弯子。: P 可参考这个,蓝图 | Flask之旅 blueprint把实现不同功能的module分开.

Factor an application into a set of blueprints.
把一个大的application分割成各自实现不同功能的module.

Register a blueprint on an application at a URL prefix and/or subdomain.
在一个blueprint中可以调用另一个blueprint的view function, 但要加相应的blueprint名.

Register a blueprint multiple times on an application with different URL rules.
没用过! 在其他文件中写功能,然后在主运行文件中导入。
实际上是一个路由系统。 本主也是新手,可以理解为大的楼盘(app)不同的单体建筑(class),单体建筑又有很多户(function)。


蓝图类似于一个类,也需要注册和实例化,只不过在项目中的位置不同,引用方式不同而已。

确切土木也有蓝图,但非彼蓝图,呵呵 主要用于模块化路由,路由太多了,用蓝本打包分类下。 不同的情况下,比如开发环境和生产环境可能有不一样的需求。通过把路由注册到某一个blueprint上,互不干扰,根据自己的需求替换绑定的blueprint即可。 对于大型应用把应用分隔为小块,每个小块使用蓝图辅助执行
推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了为什么在main.js中写import不会全局生效的问题,并提供了解决方案。在每一个vue文件中都需要写import语句才能使其生效,而在main.js中写import语句则不会全局生效。本文还介绍了使用Swal和sweetalert2库的示例。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
author-avatar
v56158645
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有