更多Flask
阅读指南:
Flask基础学习
- 使用virtualenv实现python的虚拟环境
- Python Flask 入门开发
- Python Flask框架配置管理加载的三种方式
- Python Flask 路由配置
- Python Flask静态文件配置
- Python Flask模板渲染
- Python Flask 蓝图Blueprint
- Flask 使用Context上下文
- Flask中SQLAlchemy的使用
Flask 扩展
- 使用flask-script实现Flask项目定制shell功能
- Flask 中使用flask-admin实现数据模型绑定视图
- Flask 中使用mysql数据库
- Flask使用flask-migrate实现数据库迁移
Flask 进阶
Blinker
是为了Python
提供简单快速的信号机制,其核心就是框架核心功能或者是Flask
扩展发生动作时所发送的通知,用于解耦大型应用功能。Blinker
目前还不是Flask
的默认依赖,所以想要Flask
中能使用信号机制就需要我们提前先安装Blinker
依赖库:
$ pip install blinker
Blinker 介绍
Blinker
由 Jason Kirtand
编写,并根据 MIT
许可证提供。该库支持 Python 2.7
和 Python 3.5
或更高版本;或 Jython 2.7
或更高版本;或 PyPy 2.7
或更高版本。首先我们通过一个示例来了解下如何使用Blinker
:
from blinker import signal
started =signal('test-started') # 创建信号
def each(round):
print('Round {}!'.format(round))
def round_two(round):
print('Only {}'.format(round))
started.connect(each) # 订阅信号each
started.connect(round_two,sender=2) # 订阅信号round_two
for round in rang(1,4):
started.send(round) # 发送信号
# 运行结果
Round 1!
Round 2!
Only 2
Round 3!
如上,我们可以通过signal
创建信号,通过connect
来订阅信号,当订阅信息发生修改时,会触发订阅对象。通过信号的send
方法触发信号。信号
匿名信号
信号不需要命名。每次调用 Signal
构造函数时都会创建一个唯一的信号。例如,上面处理器的替代实现可能会提供处理信号作为类属性:
from blinker import signal
class AltProcessor:
on_ready = signal()
on_complete = signal()
def __init__(self, name):
self.name = name
def go(self):
self.on_ready.send(self)
print("Alternate processing.")
self.on_complete.send(self)
def __repr__(self):
return '<AltProcessor %s>' % self.name
通过装饰器订阅信号
自从Blinker 1.1
开始可以用新的connect_via()
装饰器订阅信号。使用代码如下:
from blinker import signal
started = signal('start-doc')
@started.connect_via("1")
@started.connect_via("2")
def completed(sender):
print("AltProcessor {} completed!".format(sender))
started.send("2")
自定义信号
在Flask应用中我们可以直接使用Blinker创建信号,现在定义一种对于上传大文件的信号:
from blinker import Namespace
web_signals = Namespace()
large_file_saved = web_signals.signal('large-file-saved')
当上传文件大于一个阈值时,可以发送这个信号。
评论前必须登录!
注册