Flask 使用工厂模式
目录
- 1、工厂模式
- 2、使用工厂方法创建 app 对象
1、工厂模式
在面向对象编程中,工厂模式是开发过程中最常用的设计模式之一,属于创建型模式,就是通过一个接口函数或对象来创建其他对象并返回,该模式下不会对外暴露创建对象的具体逻辑,使用的接口函数也被叫做工厂函数。工厂模式可以使一个类的例化推迟到子类中进行,也就是说工厂模式可以推迟到在程序运行的时候才动态决定要实例化哪个类,而不是在编译时就必须进行实例化。
2、使用工厂方法创建 app 对象
我们之前是用app=Flask(__name__)
创建 Flask
应用实例的,但是如果我们想要创建多个实例,多个实例使用不同的配置的时候,就会非常麻烦,那我们就可以通过调用一个create_app()
函数来返回应用实例,通过传入不同的配置来创建不同的应用实例,这个create_app()函数就是工厂函数,这种方法就是工厂方法。
使用工厂方法的好处:
- 将创建应用实例的过程交给工厂函数,通过传入不同的配置,可以方便的创建不同环境的应用。
- 可以方便快速的进行不同配置的切换,进而切换不同配置的应用,方便进行测试和部署。
下面对之前的Flask应用主程序中引入工厂函数:
def create_app(config_name): config = config_dict.get(config_name) app = Flask(__name__) app.config.from_object(config) ...... # 注册蓝图 app.register_blueprint(user_blue) app.register_blueprint(admin_blue) return app
工厂函数接收配置名称 config_name
,支持在应用程序的不同位置传人不同的配置名称来创建实例,除了上面代码所展示的,把注册蓝图的代码放入工厂函数,还可以把错误处理函数、上下文处理函数、日志处理函数等类似的接收程序实例 app 作为参数的函数放入工厂函数中进行,工厂函数类似于一个流水线,创建完应用实例 app
后,执行一系列的注册函数为实例 app 注册扩展功能等,等执行完返回 app 时,我们就可以得到一个包含我们想要的所有扩展功能的应用实例。
到此这篇关于 Flask
使用工厂模式的文章就介绍到这了,更多相关 Flask 工厂模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
Flask 使用类组织配置详情
在实际的项目中,我们一般都会建立三个环境:开发.测试和生产环境,这三种环境会使用不同的配置组合,为了能方便地切换配置,我们可以为不同的环境创建不同的配置文件,但是最方便的做法是在单个配置文件中使用 Python 类来组织多个不同类别的配置. 例如下面是一个应用的配置文件 settings.py,它包含一个基本配置类 BaseConfig, 还有其他特定的配置类: 开发配置类 DevelopConfig 测试配置类 TestCofig 生产配置类 ProductConfig 这些特定配置类都继承自
-
Flask-蓝图 blueprint详情
目录 1.蓝图的定义 1.1使用蓝图 前言: 我们的应用经常会有很多小模块,比如用户模块.后台管理模块等,虽然这些模块都在同一个应用中,但是功能大不相同,把他们放在同一个文件中,显得十分杂乱,不便于管理维护,那么有没有什么方法可以将模块分开管理呢?是有的!Flask 蓝图(Blueprint),它可以模块化管理路由,使用蓝图可以把不同模块的视图函数写在不同的py文件中,在主视图中导入分路由视图的模块,并注册蓝图对象,降低各个功能模块的耦合度使程序结构更加简单.清晰. Flask使用Bluepri
-
Flask框架工厂函数用法实例分析
本文实例讲述了Flask框架工厂函数用法.分享给大家供大家参考,具体如下: 在我们开始学习FLask的时候,创建应用的实例是用app=Flask(name)来做的,但是当我们想创建多个不同配置的实例的时候咋办呢,每次都要改是不是很烦,那为了减少麻烦,我们可以采用调用一个create_app函数来返回应用实例的方法,这就是工厂方法的大概意思啦! 文字说的再多也难以帮助理解,看代码示例: 1.最初的写法 #__init__.py里面创建实例,应用实例对象创建完再引入视图函数的模块,因为这时候视图函数
-
Flask 数据库迁移详情
目录 1.使用 Flask-Migrate 实现数据库迁移 2.Flask-Migrate的使用 2.1 数据库的迁移过程 2.1.1 创建迁移环境 2.1.2 生成迁移脚本 2.1.3 更新数据库 3.总结 1.使用 Flask-Migrate 实现数据库迁移 db.create_all()不会重新创建表或是更新表,需要先使用db.drop_all()删除数据库中所有的表之后再调用db.create_all()才能重新创建表,但是这样的话,原来表中的数据就都被删除了,这肯定是不行的,这时就出现
-
Flask 入门系列 Cookie与session的介绍
目录 一.Cookie的使用 1.什么是Cookie 2.在Flask中使用Cookie 二.session的使用 1.什么是session 2.Flask中的session对象 3.在Flask中使用session 一.Cookie的使用 1.什么是Cookie 我们都知道,HTTP 协议是无状态的,也就是说,在一次请求响应结束后,服务端不会保留任何对方状态的信息,对于某些需要保留的信息,可以通过 Cookie 技术来完成,通过在请求和响应报文中添加 Cookie 数据来保存客户端的状态信息.
-
Flask 请求钩子的实现
在 Web 应用中,有时需要在响应请求前或者响应请求后做一些处理,为了让每个视图函数避免编写重复功能的代码,Flask 提供了请求钩子,它们可以用来注册在请求处理的不同阶段执行的处理函数,我们就可以轻易的对请求进行预处理和后处理. Flask 常用请求钩子如下: before_first_request:在处理第一个请求之前运行 before_request:在每次请求之前运行,如果没有未处理的异常抛出,会在每个请求结束后运行 after_request:如果没有未处理的异常抛出,在每次请求结束
-
关于Flask 视图介绍
目录 2.类视图 2.1 标准类视图 2.1.1 基于方法的视图 1.视图函数 之前的文章说过,在 Flask 中路由是请求的 url 与处理函数之间的映射,使用app.route装饰器将处理函数和 url 绑定,路由绑定的处理函数就被成为视图函数. @app.route('/user/<name>') def hello_user(name): return 'Hello {}!'.format(name) 上面的hello_user()函数就是一个简单的视图函数. 当然我们也可以不使用ap
-
Flask 数据库集成的介绍
目录 1.使用Flask-SQLAlchemy管理数据库 1.1 配置Flask_SQLAlchemy 1.2 定义数据库模型 1.3 创建数据库和表 1.4 数据库操作 1.4.1 Create 1.4.2 Read 1.4.3 Update 1.4.4 Delete 1.4.5 在视图函数里操作数据库 前言: 数据库是大多数 Web 应用的基础设施,只要想把数据存储下来,就离不开数据库,下面将一起学习一下如何给 Flask 应用添加数据库支持. 1.使用Flask-SQLAlchemy管理数
-
关于Flask 上下文详细介绍
目录 1.上下文概念 2.Flask中的上下文 2.1请求上下文 2.2应用上下文 1.上下文概念 上下文,说白了就是所谓的语境,就是语言环境.比如单独拎出来一篇文章的某一句话,我们可能不能理解它的意思,但是通过这句话所处的语言环境,再结合它前后的语句,就能很轻易的理解. 我们可以把上下文理解为当前环境的快照,是一个用来保存状态的对象.在代码执行的某个时刻,根据上下文的代码逻辑,可以决定在当前时刻下使用到的环境变量等. 2.Flask中的上下文 Flask 中有两种上下文,应用上下文(appli
-
Flask 使用工厂模式
目录 1.工厂模式 2.使用工厂方法创建 app 对象 1.工厂模式 在面向对象编程中,工厂模式是开发过程中最常用的设计模式之一,属于创建型模式,就是通过一个接口函数或对象来创建其他对象并返回,该模式下不会对外暴露创建对象的具体逻辑,使用的接口函数也被叫做工厂函数.工厂模式可以使一个类的例化推迟到子类中进行,也就是说工厂模式可以推迟到在程序运行的时候才动态决定要实例化哪个类,而不是在编译时就必须进行实例化. 2.使用工厂方法创建 app 对象 我们之前是用app=Flask(__name__)创
-
Javascript面向对象设计一 工厂模式
1.工厂模式抽象了创建具体对象的过程,但是在ECMAScript中无法创建类,所以就使用一种函数来封装以特定接口创建对象的细节.以一下情况为例, 有一个员工类,有姓名.年龄.职位属性, 复制代码 代码如下: function CreateEmployee(name, age, job) { var Emp = new Object(); Emp.name = name; Emp.age = age; Emp.job = job; Emp.sayName = function () { alert
-
PHP设计模式之工厂模式详解
在开发大型系统时,往往会出现这样一种情况: 我有一部分基础数据,是类classA是从数据库A读取出来的,其他很多的功能都是基于这个基础数据来操作的.现在呢,我想把数据从数据库A变成从另外的数据源去获取,这时候,要修改起来就比较麻烦,要修改其他很多类的代码.这种设计显然是不够灵活的,换句话说,就是紧耦合的,那么什么是紧耦合呢?紧耦合就是指系统中某个部分的函数或类严重依赖于系统的其他部分中的函数或类的行为和结构. 这时,工厂模式的作用性就体现出来了. 工厂模式 就是解决这样的一些情况的设计方法.
-
浅析php工厂模式
本系列文章来总结一下设计模式在PHP中的应用,这是第二篇创建型模式之工厂模式. 设计模式的一般介绍在第一篇文章讲了,这里就不重复. 工厂模式 实现:定义一个用于创建对象的接口,让子类决定实例化哪一个类. 应用场景:众多子类并且会扩充.创建方法比较复杂. 工厂模式分为三种:简单工厂.工厂方法.抽象工厂 , 三种工厂的区别是,抽象工厂由多条产品线,而工厂方法只有一条产品线,是抽象工厂的简化.而工厂方法和简单工厂相对,大家初看起来好像工厂方法增加了许多代码但是实现的功能和简单工厂一样.但本质是,简单工
-
使用简单工厂模式来进行Python的设计模式编程
计模式的目的是让代码易维护.易扩展,不能为了模式而模式,因此一个简单的工具脚本是不需要用到任何模式的. 简单工厂模式又叫静态工厂方法模式,工厂模式家族中最简单的一种模式.这个模式的基本工作方式: 通过一个工厂来决定创建哪种具体的产品实例. 下面是一个简单的工厂实例: def create_animal(name): if name == 'dog': return Dog() elif name == 'cat': return Cat() animal = create_animal('dog
-
javascript 模式设计之工厂模式学习心得
模式类型:工厂模式 模式说明:常用模式之一,用来动态创建对象 适用范围:在运行期间需要在一系列可互换的子类中进行选择的类 注意事项:接口的实现,从而使不同子类可以被同等的对待,恰当的使用工厂模式,但不要拘泥与形式,理解本质. 关键点:以 函数/类/子类 构建的选择器 本质:函数作为选择器的使用 一般使用形式: 作为独立的选择器存在: 复制代码 代码如下: function FactoryMode(index){ switch(index){ case "index1" : return
-
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下来将为大家讲解在JS中面向对象的实现. 工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象.其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可. function createBlo
-
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
在上篇文章给大家介绍了javascript面向对象基础,本篇文章继续深入学习javascript面向对象,JS的语法非常灵活,简单的对象创建就有好几种不同的方法.这些过于灵活的地方有时候确实很让人迷惑,那么今天我们就来梳理一下JS中常用的创建对象的几种方法吧. 前言 虽然使用 Object构造函数 或者使用 对象字面量 可以很方便的用来创建一个对象,但这种方式有一个明显的缺点:使用一个接口创建多个对象会产生很多冗余的代码.因此为了解决这个问题,人们开始使用以下几种方式来常见对象. 工厂模式 该模
-
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
1.工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,而由于在ECMAScript中无法创建类,因此用函数封装以特定接口创建对象.其实现方法非常简单,也就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可. function a(name){ var b = new object(); b.name = name; b.say = function(){ alert(this.name); } return b } 函数内部产生b对象并返回. 2.构造函数模式 function
随机推荐
- 解决VS2017不能打开stdio.h等文件的问题
- cmd命令行大全 dos命令 cmd命令整理
- MyBatis Mapper代理使用方法详解
- JavaScript异步调用定时方法并停止该方法实现代码
- Python导入oracle数据的方法
- C#利用GDI+绘制旋转文字等效果实例
- 基于C#实现Windows服务状态启动和停止服务的方法
- DSP中浮点转定点运算--举例及编程中的心得
- 简略分析Android的Retrofit应用开发框架源码
- 关于< tbody >的一个实例,很实用。
- 关于C语言除0引发的思考
- java统计字符串中指定元素出现次数方法
- 服务器免密登录的实现以及异常解决方案
- C++数据结构之文件压缩(哈夫曼树)实例详解
- Android模拟开关按钮点击打开动画(属性动画之平移动画)
- easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
- 想在网吧混得开的话来看看
- python的文件操作方法汇总
- nginx https反向代理tomcat的2种实现方法
- Java中Http连接的两种方式(小结)