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调用系统底层API播放wav文件的方法
Aug 11 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
Apr 22 Python
Python socket实现的简单通信功能示例
Aug 21 Python
Python何时应该使用Lambda函数
Jul 02 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
Python是怎样处理json模块的
Jul 16 Python
Python实现异步IO的示例
Nov 05 Python
Python实现对word文档添加密码去除密码的示例代码
Dec 29 Python
Django如何重置migration的几种情景
Feb 24 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
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
javascript 尚未实现错误解决办法
2008/11/27 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
分享Python字符串关键点
2015/12/13 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
Python-接口开发入门解析
2019/08/01 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
深入浅析Python代码规范性检测
2020/07/31 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
我爱我的祖国演讲稿
2014/05/04 职场文书
董事长秘书工作职责
2014/06/10 职场文书
公司合作意向书范文
2014/07/30 职场文书
2014入党积极分子破除“四风”思想汇报
2014/09/14 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
国际贸易实训报告
2014/11/05 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
市场部岗位职责范本
2015/04/15 职场文书
2015年员工试用期工作总结
2015/05/28 职场文书
校运会广播稿
2015/08/19 职场文书