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学习之第三方包安装方法(两种方法)
Jul 30 Python
详解Python3中yield生成器的用法
Aug 20 Python
Python文件的读写和异常代码示例
Oct 31 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
如何在Windows中安装多个python解释器
Jun 16 Python
python使用opencv resize图像不进行插值的操作
Jul 05 Python
Python实时监控网站浏览记录实现过程详解
Jul 14 Python
python生成word合同的实例方法
Jan 12 Python
python如何用matplotlib创建三维图表
Jan 26 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 Python
Python基础之数据结构详解
Apr 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
main.php
2006/12/09 PHP
令PHP初学者头疼十四条问题大总结
2008/11/12 PHP
在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
2015/12/21 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
jQuery与其它库冲突的解决方法
2010/06/25 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
12306验证码破解思路分享
2015/03/25 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
微信小程序中限制激励式视频广告位显示次数(实现思路)
2019/12/06 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
Vue实现返回顶部按钮实例代码
2020/10/21 Javascript
Python编程之微信推送模板消息功能示例
2017/08/21 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
标记环介质访问控制协议
2016/03/27 面试题
宣传保护环境的公益广告词
2014/03/13 职场文书
教师考核评语
2014/04/28 职场文书
2014年实习生工作总结
2014/11/27 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
Python基础之字符串格式化详解
2021/04/21 Python