Django中的信号
<div id="cnblogs_post_body" class="blogpost-body cnblogs-markdown"> Django中内置的signalDjango中提供了"信号调度",用于在框架执行操作时解耦. 一些动作发生的时候,系统会根据信号定义的函数执行相应的操作 Model_signals pre_init
post_init
pre_save
post_save
pre_delete
post_delete
m2m_changed
class_prepared
Managemeng_signals pre_migrate
post_migrate
Request/response_signals request_started
request_finished
got_request_exception
Test_signals setting_changed
template_rendered
Datebase_Wrapperd connection_created
pre_save和 创建一个Django项目,配置好路由映射
django.db <span style="color: #0000ff;">class<span style="color: #000000;"> UserInfo(models.Model):
name=models.CharField(max_length=32<span style="color: #000000;">) pwd=models.CharField(max_length=64)
django.shortcuts app01 <span style="color: #0000ff;">def<span style="color: #000000;"> index(request): <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"> 项目的 django.db.models.signals <span style="color: #0000ff;">def pre_save_func(sender,**<span style="color: #000000;">kwargs):<span style="color: #0000ff;">def post_save_func(sender,**<span style="color: #000000;">kwargs): <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"> 创建一个 < > {: <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"> 比较打印的结果,可以看到models对象保存后,在打印信息里包含一个 也可以使用装饰器来触发信号,把上面 django.core.signals django.dispatch @receiver(request_finished) <div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"> 则在本次请求结束后自动触发callback函数,在后台打印 自定义信号1.定义信号新建一个项目,配置好路由,在项目根目录下创建一个 action=django.dispatch.Signal(providing_args=[<span style="color: #800000;">"<span style="color: #800000;">aaaa<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">bbbb<span style="color: #800000;">"])
2.注册信号项目应用下面的 singal_test <span style="color: #0000ff;">def pre_save_func(sender,kwargs)
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);"> 3.触发信号views视图函数内容: singal_test action.send(sender=<span style="color: #800000;">"<span style="color: #800000;">python<span style="color: #800000;">",aaa=<span style="color: #800000;">"<span style="color: #800000;">111<span style="color: #800000;">",bbb=<span style="color: #800000;">"<span style="color: #800000;">222<span style="color: #800000;">")
用浏览器打开 :
由于内置信号的触发者已经集成到Django中,所以会自动调用,而对于自定义信号需要在任意位置触发 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |