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使用socket远程连接错误处理方法
Apr 29 Python
Python编程实现数学运算求一元二次方程的实根算法示例
Apr 02 Python
python解决pandas处理缺失值为空字符串的问题
Apr 08 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
利用Python模拟登录pastebin.com的实现方法
Jul 12 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
如何使用python传入不确定个数参数
Feb 18 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
May 22 Python
django和flask哪个值得研究学习
Jul 31 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
Apr 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连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
cakephp常见知识点汇总
2017/02/24 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
JavaScript事件列表解说
2006/12/22 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
win7下安装配置node.js+express开发环境
2015/12/06 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
python opencv实现图像边缘检测
2019/04/29 Python
使用Matplotlib 绘制精美的数学图形例子
2019/12/13 Python
深入浅析Python 函数注解与匿名函数
2020/02/24 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
美国维生素、补充剂、保健食品购物网站:Vitacost
2016/08/05 全球购物
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
印度购物网站:TATA CLiQ
2017/11/23 全球购物
先进党支部事迹材料
2014/01/13 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
golang的文件创建及读写操作
2022/04/14 Golang