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中的hashlib和base64加密模块使用实例
Sep 02 Python
Python中捕捉详细异常信息的代码示例
Sep 18 Python
浅谈python中的实例方法、类方法和静态方法
Feb 17 Python
Python+selenium 获取一组元素属性值的实例
Jun 22 Python
python中将正则过滤的内容输出写入到文件中的实例
Oct 21 Python
python 中的列表生成式、生成器表达式、模块导入
Jun 19 Python
Python识别快递条形码及Tesseract-OCR使用详解
Jul 15 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
基于python操作ES实例详解
Nov 16 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
Python爬虫入门教程02之笔趣阁小说爬取
Jan 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
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
python的sorted用法详解
2019/06/25 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
Python如何获取Win7,Win10系统缩放大小
2020/01/10 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
python装饰器代码深入讲解
2021/03/01 Python
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
学校运动会开幕演讲稿
2014/01/04 职场文书
党支部对照检查材料
2014/08/25 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
个性发展自我评价2015
2015/03/09 职场文书
mysql部分操作
2021/04/05 MySQL