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调用cmd命令行制作刷博器
Jan 13 Python
Python实现矩阵转置的方法分析
Nov 24 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
python制作朋友圈九宫格图片
Nov 03 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 Python
解决Keras自带数据集与预训练model下载太慢问题
Jun 12 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 20 Python
django中ImageField的使用详解
Dec 21 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中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
PHP+MYSQL实现读写分离简单实战
2017/03/13 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
Python实现App自动签到领取积分功能
2018/09/29 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
Python实现疫情地图可视化
2021/02/05 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
本科生求职简历的自我评价
2013/10/21 职场文书
业务代表的岗位职责
2013/11/16 职场文书
工业自动化毕业生自荐信范文
2014/01/04 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
先进人物事迹材料
2014/12/29 职场文书
雷锋电影观后感
2015/06/10 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS
js判断两个数组相等的5种方法
2022/05/06 Javascript