Django   发布时间:2022-04-10  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Django中的信号大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

<div id="cnblogs_posT_Body" class="blogpost-body cnblogs-markdown">

Django中内置的signal

Django中提供了"信号调度",用于在框架执行操作时解耦.

一些动作发生的时候,系统会根据信号定义的函数执行相应的操作

@H_402_9@model_signals

pre_init                        
post_init                       
pre_save                        
post_save                       
pre_delete                      
post_delete                     
m2m_changed                     updatE),自动触发
class_prepared                  

@H_402_9@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和post_save信号

创建一个Django项目,配置好路由映射

@H_910_84@models.py中的代码:

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)

views.py中的代码:

 django.shortcuts httpResponse
 app01 <span style="color: #0000ff;">def<span style="color: #000000;"> index(request):
modelS.UserInfo.objects.create(name
=<span style="color: #800000;">"
<span style="color: #800000;">mysql
<span style="color: #800000;">",pwd=<span style="color: #800000;">"<span style="color: #800000;">mysql123<span style="color: #800000;">"<span style="color: #000000;">)
<span style="color: #0000ff;">return httpResponse(<span style="color: #800000;">"<span style="color: #800000;">ok<span style="color: #800000;">")

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);">复制代码

项目的__init__.py文件中代码:

 django.db.models.signals <span style="color: #0000ff;">def pre_save_func(sender,**<span style="color: #000000;">kwargs):

</span><span style="color: #0000ff;"&gt;print</span>(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;pre_save_func</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;)
</span><span style="color: #0000ff;"&gt;print</span>(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;pre_save_msg:</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;,sender,kwargs)

<span style="color: #0000ff;">def post_save_func(sender,**<span style="color: #000000;">kwargs):
<span style="color: #0000ff;">print(<span style="color: #800000;">"<span style="color: #800000;">post_save_func<span style="color: #800000;">"<span style="color: #000000;">)
<span style="color: #0000ff;">print(<span style="color: #800000;">"<span style="color: #800000;">post_save_msg:<span style="color: #800000;">"<span style="color: #000000;">,kwargs)

pre_save.connect(pre_save_funC) <span style="color: #008000;">#<span style="color: #008000;"> models对象保存前触发callBACk函数
post_save.connect(post_save_funC) <span style="color: #008000;">#<span style="color: #008000;"> models对象保存后触发函数


<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);">复制代码

创建一个index.html网页,用浏览器打开这个项目,在服务端后台打印信息如下:

< S.UserInfo> {: : ,: false,: ,update_fieldsE}

post_save_func
post_save_msg: <<span style="color: #0000ff;">class <span style="color: #800000;">'<span style="color: #800000;">app01.modelS.UserInfo<span style="color: #800000;">'> {<span style="color: #800000;">'<span style="color: #800000;">signal<span style="color: #800000;">': <django.db.models.signals.ModelSignal object at 0x0000000002E62630><span style="color: #000000;">,<span style="color: #800000;">'<span style="color: #800000;">created<span style="color: #800000;">': True,<span style="color: #800000;">'<span style="color: #800000;">update_fields<span style="color: #800000;">': None,<span style="color: #800000;">'<span style="color: #800000;">using<span style="color: #800000;">': <span style="color: #800000;">'<span style="color: #800000;">default<span style="color: #800000;">'}


<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);">复制代码

比较打印的结果,可以看到models对象保存后,在打印信息里包含一个"create=True"的键值对.

Django中的信号

也可以使用装饰器来触发信号,把上面__init__.py中的代码修改:

 django.core.signals request_finished
 django.dispatch @receiver(request_finished)
<span style="color: #0000ff;">def
callBACk(sender,**<span style="color: #000000;">kwargs):
<span style="color: #0000ff;">print
(<span style="color: #800000;">"
<span style="color: #800000;">request finished!<span style="color: #800000;">")

<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><a title="复制代码" onclick="copyCnblogsCode(this)" href="javascript:void(0);">复制代码

在本次请求结束后自动触发callBACk函数,在后台打印"request finished!"这句话.

自定义信号

1.定义信号

新建一个项目,配置好路由,在项目根目录下创建一个singal_test.py的文件,内容为

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.注册信号

项目应用下面的__init__.py文件内容:

 singal_test <span style="color: #0000ff;">def pre_save_func(sender,kwargs)

action.connect(pre_save_funC)


<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;">")

用浏览器打开index.html网页,后台打印信息如下:

{: ,: ,: }

由于内置信号的触发者已经集成到Django中,所以会自动调用,而对于自定义信号需要在任意位置触发

大佬总结

以上是大佬教程为你收集整理的Django中的信号全部内容,希望文章能够帮你解决Django中的信号所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:
猜你在找的Django相关文章
其他相关热搜词更多
phpJavaPython程序员load如何string使用参数jquery开发安装listlinuxiosandroid工具javascriptcap