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中List.count()方法的使用教程
May 20 Python
Python IDE PyCharm的基本快捷键和配置简介
Nov 04 Python
python中map的基本用法示例
Sep 10 Python
pycharm执行python时,填写参数的方法
Oct 29 Python
深入了解Python在HDA中的应用
Sep 05 Python
jupyter note 实现将数据保存为word
Apr 14 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
Jun 04 Python
python爬虫请求头设置代码
Jul 28 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 Python
Python使用urlretrieve实现直接远程下载图片的示例代码
Aug 17 Python
Python如何使用循环结构和分支结构
Apr 13 Python
Django框架中视图的用法
Jun 10 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
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
php获取远程文件内容的函数
2015/11/02 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
2017/02/15 PHP
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
js常用代码段收集
2011/10/28 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
JavaScript实现动画打开半透明提示层的方法
2015/04/21 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
深入理解Python3 内置函数大全
2017/11/23 Python
python自动化报告的输出用例详解
2018/05/30 Python
实例讲解python中的序列化知识点
2018/10/08 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
C#笔试题和英文面试题
2013/02/07 面试题
PyQt 如何创建自定义QWidget
2021/03/24 Python
会计助理岗位职责
2014/02/17 职场文书
办公室主任个人总结
2015/02/28 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
2016年小学生迎国庆广播稿
2015/12/18 职场文书
素质教育培训心得体会
2016/01/19 职场文书
MySQL中出现乱码问题的终极解决宝典
2021/05/26 MySQL