大佬教程收集整理的这篇文章主要介绍了Django中的信号,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
<div id="cnblogs_posT_Body" class="blogpost-body cnblogs-markdown">
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
request/response_signals
test_signals
Datebase_Wrapperd
pre_save和post_save
信号
创建一个Django项目,配置好路由映射
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;">")
项目的__init__.py
文件中代码:
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):</span><span style="color: #0000ff;">print</span>(<span style="color: #800000;">"</span><span style="color: #800000;">pre_save_func</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #0000ff;">print</span>(<span style="color: #800000;">"</span><span style="color: #800000;">pre_save_msg:</span><span style="color: #800000;">"</span><span style="color: #000000;">,sender,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对象保存后触发函数
创建一个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;">'}
比较打印的结果,可以看到models对象保存后,在打印信息里包含一个"create=True"
的键值对.
也可以使用装饰器来触发信号,把上面__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;">")
则在本次请求结束后自动触发callBACk函数,在后台打印"request finished!"
这句话.
新建一个项目,配置好路由,在项目根目录下创建一个singal_test.py
的文件,内容为
项目应用下面的__init__.py
文件内容:
singal_test <span style="color: #0000ff;">def pre_save_func(sender,kwargs)
action.connect(pre_save_funC)
views视图函数内容:
用浏览器打开index.html
网页,后台打印信息如下:
由于内置信号的触发者已经集成到Django中,所以会自动调用,而对于自定义信号需要在任意位置触发
以上是大佬教程为你收集整理的Django中的信号全部内容,希望文章能够帮你解决Django中的信号所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。