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之入门(五)缩进和选择
May 27 Python
python中ConfigParse模块的用法
Sep 29 Python
在Python中操作字典之update()方法的使用
May 22 Python
python 排序算法总结及实例详解
Sep 28 Python
详解Python使用tensorflow入门指南
Feb 09 Python
anaconda如何查看并管理python环境
Jul 05 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
使用Django清空数据库并重新生成
Apr 03 Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
python数字图像处理之图像自动阈值分割示例
Jun 28 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各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
了不起的node.js读书笔记之node的学习总结
2014/12/22 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
Python中3种内建数据结构:列表、元组和字典
2014/11/30 Python
用Python实现一个简单的线程池
2015/04/07 Python
Python MySQLdb Linux下安装笔记
2015/05/09 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
python如何使用腾讯云发送短信
2020/09/17 Python
python中最小二乘法详细讲解
2021/02/19 Python
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
建筑投标担保书
2014/05/20 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
终止劳动合同协议书
2014/10/05 职场文书
2022年显卡天梯图(6月更新)
2022/06/17 数码科技