Flask框架工厂函数用法实例分析


Posted in Python onMay 25, 2019

本文实例讲述了Flask框架工厂函数用法。分享给大家供大家参考,具体如下:

在我们开始学习FLask的时候,创建应用的实例是用app=Flask(name)来做的,但是当我们想创建多个不同配置的实例的时候咋办呢,每次都要改是不是很烦,那为了减少麻烦,我们可以采用调用一个create_app函数来返回应用实例的方法,这就是工厂方法的大概意思啦!

文字说的再多也难以帮助理解,看代码示例:

1.最初的写法

#__init__.py里面创建实例,应用实例对象创建完再引入视图函数的模块,因为这时候视图函数上的@app.route()才有效
from flask import Flask
from myapp.admin import admin
import config
app = Flask(__name__)
app.config.from_object('config')
app.register_blueprint(admin)
from myapp import views
#run.py里面我们来启动刚才创建的应用实例
from myapp import app
app.run(host='0.0.0.0')

2.改进,用工厂模式来创建应用

#__init__.py 改变创建app实例的方式,不之间创建app,而是通过create_app函数里面创建,再返回app对象,这样的好处就是调用的时候才创建,想创建多少就调用多少,而且每次调用都能应用不同的配置参数,这里面这个create_app()就是应用的工厂方法!在工厂方法里面我们分别加载了配置扩展和蓝图!敲黑板!!!
from flask import Flask
from flask.ext.mail import Mail
from flask.ext.sqlalchemy import SQLAlchemy
from werkzeug.utils import import_string
mail = Mail()
db = SQLAlchemy()
blueprints = [
  'myapp.main:main',
  'myapp.admin:admin',
]
def create_app(config):
  app = Flask(__name__)
  app.config.from_object(config)
  # Load extensions
  mail.init_app(app)
  db.init_app(app)
  # Load blueprints
  for bp_name in blueprints:
    bp = import_string(bp_name)
    app.register_blueprint(bp)
  return app
#敲黑板!!!需要注意,用了工厂方法之后,就不像在单一文件中一样有全局的app应用实例对象了,那怎么办呢,没有app就不能用装饰器给视图函数路由了,这里面我们要画重点了:Flask的蓝图功能,我们刚才工厂函数里面已经注册了蓝图了,我们要用蓝图对象路由
from flask import Blueprint
main = Blueprint('main', __name__)
from myapp.main import views
from myapp.main import main
@main.route('/')
def index():
  return '<h1>Hello World from app factory!</h1>'

run.py用了工厂函数之后,启动就要调用工厂函数创建应用实例再启动

from myapp import create_app
import config
app = create_app('config')
app.run(host='0.0.0.0', debug=True)

希望本文所述对大家基于flask框架的Python程序设计有所帮助。

Python 相关文章推荐
Python实现的ini文件操作类分享
Nov 20 Python
Python版微信红包分配算法
May 04 Python
python基于multiprocessing的多进程创建方法
Jun 04 Python
Python 的描述符 descriptor详解
Feb 27 Python
python制作企业邮箱的爆破脚本
Oct 05 Python
Python基础学习之常见的内建函数整理
Sep 06 Python
python利用正则表达式搜索单词示例代码
Sep 24 Python
python DataFrame 修改列的顺序实例
Apr 10 Python
python实现简单多人聊天室
Dec 11 Python
python实现两个dict合并与计算操作示例
Jul 01 Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 Python
python获取整个网页源码的方法
Aug 03 Python
Python中Numpy mat的使用详解
May 24 #Python
Python中Numpy ndarray的使用详解
May 24 #Python
numpy数组之存取文件的实现示例
May 24 #Python
Python实现使用request模块下载图片demo示例
May 24 #Python
Python实现操纵控制windows注册表的方法分析
May 24 #Python
Django框架会话技术实例分析【Cookie与Session】
May 24 #Python
Django框架中间件(Middleware)用法实例分析
May 24 #Python
You might like
php5中类的学习
2008/03/28 PHP
linux php mysql数据库备份实现代码
2009/03/10 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
PHP实现微信退款功能
2018/10/02 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
关于document.cookie的使用javascript
2008/04/11 Javascript
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
javascript中 try catch用法
2015/08/16 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
2017/05/02 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
js实现导航跟随效果
2018/11/17 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python中字典和JSON互转操作实例
2015/01/19 Python
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
python字符类型的一些方法小结
2016/05/16 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
django rest framework 自定义返回方式
2020/07/12 Python
html5唤起app的方法
2017/11/30 HTML / CSS
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
简述安装Slackware Linux系统的过程
2012/05/08 面试题
职专应届生求职信
2013/11/16 职场文书
成考报名单位证明范本
2014/01/16 职场文书
教师校本培训方案
2014/02/26 职场文书
高三学生评语大全
2014/04/25 职场文书
爱护公物标语
2014/06/24 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
Java spring定时任务详解
2021/10/05 Java/Android