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中urllib2模块的8个使用细节分享
Jan 01 Python
python中os操作文件及文件路径实例汇总
Jan 15 Python
Python 绘图和可视化详细介绍
Feb 11 Python
python 网络编程详解及简单实例
Apr 25 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 Python
python实现五子棋程序
Apr 24 Python
python之json文件转xml文件案例讲解
Aug 07 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 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
c#中的实现php中的preg_replace
2009/12/21 PHP
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
php中__toString()方法用法示例
2016/12/07 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
PHP命名空间简单用法示例
2018/12/28 PHP
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
pymysql模块使用简介与示例
2020/11/17 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
一波HTML5 Canvas基础绘图实例代码集合
2016/02/28 HTML / CSS
Html5 Geolocation获取地理位置信息实例
2016/12/09 HTML / CSS
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
大学生自我鉴定
2013/12/08 职场文书
运动会跳远加油稿
2014/02/20 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
煤矿安全生产标语
2014/06/06 职场文书
篮球社团活动总结
2014/06/27 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
卫生主题班会
2015/08/14 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
详解MindSpore自定义模型损失函数
2021/06/30 Python