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中IPYTHON入门实例
May 11 Python
python爬虫框架talonspider简单介绍
Jun 09 Python
Python安装模块的常见问题及解决方法
Feb 05 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
python删除字符串中指定字符的方法
Aug 13 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
Django模板Templates使用方法详解
Jul 19 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
Jan 18 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
Mar 09 Python
pytorch 使用半精度模型部署的操作
May 24 Python
Python学习之包与模块详解
Mar 19 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
Smarty安装配置方法
2008/04/10 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
Js 随机数产生6位数字
2010/05/13 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
python集合类型用法分析
2015/04/08 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
Django框架验证码用法实例分析
2019/05/10 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
什么是命名空间(NameSpace)
2015/11/24 面试题
双十佳事迹材料
2014/01/29 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
音乐教育感言
2014/03/05 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
民事答辩状格式范文
2015/05/21 职场文书
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL
zabbix配置nginx监控的实现
2022/05/25 Servers