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里隐藏的“禅”
Jun 16 Python
Python合并字典键值并去除重复元素的实例
Dec 18 Python
pycharm远程调试openstack代码
Nov 21 Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 Python
python和pygame实现简单俄罗斯方块游戏
Feb 19 Python
Python中的正则表达式与JSON数据交换格式
Jul 03 Python
python 同时读取多个文件的例子
Jul 16 Python
Django接收自定义http header过程详解
Aug 23 Python
解决python对齐错误的方法
Jul 16 Python
python使用列表的最佳方案
Aug 12 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
numpy数据类型dtype转换实现
Apr 24 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截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
2019/04/08 PHP
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
对javascript继承的理解
2016/10/11 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
Bootstrap如何激活导航状态
2017/03/22 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
玩转vue的slot内容分发
2018/09/22 Javascript
JS实现分页导航效果
2020/02/19 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
使用Python脚本将Bing的每日图片作为桌面的教程
2015/05/04 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
python数据结构之列表和元组的详解
2017/09/23 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
租房协议书范本
2014/04/09 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
单位授权委托书范文
2014/08/02 职场文书
企业挂职心得体会
2014/09/10 职场文书
先进单位申报材料
2014/12/25 职场文书
学生个人总结范文
2015/02/15 职场文书
婚宴主持词
2015/06/30 职场文书
教师节领导致辞
2015/07/29 职场文书