msyz999明仕亚洲官网文娱django的信号运用疑问

我想在模型保管和删除数据时分中断一些其他操纵。
反省文档,模型的保管可以重写。类似如下

models.py

class owgameservermodels.Model:
    serverid = models.IntegerFieldu"游戏服ID号",primary_key=True
    serverhost = models.GenericIPAddressFieldu"游戏服IP"
    servername = models.CharFieldu"游戏服称号",max_length=32
    serverport = models.IntegerFieldu"游戏服端标语"

    def saveself,*args,**kwargs:
        print 添加新服:服id:%s-服ip:%s-服称号:%s-服端口:%s %self.serverid,self.serverhost,self.servername,self.serverport
        superowgameserver,self.save*args,**kwargs
        print ansible_owgameserver_file
        ansiblefile = openansible_owgameserver_file,a
        ansiblefile.writeow%s ansible_ssh_host=%s server_port=%s server_id=%s %self.serverid,self.serverhost,self.serverport,self.serverid
        ansiblefile.close
        print 添加完成.

然后想写删除时分,发明文档是提供了信号来处理
然后我的处理如下
single.py

from models import owgameserver
from django.dispatch import receiver
from django.db.models.signals import post_delete,post_save


def del_ansible_hostsender,**kwargs:
    print 删除文件中的列表
post_delete.connectdel_ansible_host,sender=owgameserver


def save_ansible_hostsender,**kwargs:
    print 保管内容
post_save.connectsave_ansible_host,sender=owgameserver

然后发明,无论我是添加新的内容,还是删除内容都无法触发这两个信号里的内容,这是为咋的?

已自行处理,参考@小杰控的,和stackoverflow一些信息

运用信号后,调用pre_delete,post_save来触发models保管和删除后实行的一些操纵

反省文档,在django 1.7后,运用信号时分需求在使用配置类中的ready 办法中衔接。

以是我们需求配置先ready
需求在以下两个中央写入配置
需求在项目标app.py,__init__.py两个文件中写入配置

app.py中的内容
class OwgameConfigAppConfig:
    name = owgame

    ####添加ready函数
    def readyself:
        import owgame.signals  ###项目标signals地位
__init__.py中的内容
default_app_config = owgame.apps.OwgameConfig

###OwgameConfig是app.py中的定义的class类名
signals中的内容
from models import owgameserver
from django.dispatch import receiver,Signal
from django.db.models.signals import post_delete,post_save,pre_save,pre_delete


@receiverpre_delete,sender=owgameserver
def del_ansible_hostsender,instance,**kwargs:
    delserver = owgameserver.objects.filterpk=instance.serverid
    print u删除%s,%s %delserver[0].servername,delserver[0].serverhost
    print u删除文件中的列表


@receiverpost_save,sender=owgameserver
def save_ansible_hostsender,instance,**kwargs:
    addserver = owgameserver.objects.filterpk=instance.serverid
    print u添加:%s,%s %addserver[0].servername,addserver[0].serverhost
    print u保管内容
测试在添加models和删除models能否会触发这个信号中的内容

添加一个新服

反省日记输入

[28/Oct/2016 15:51:46] "GET /admin/owgame/owgameserver/ HTTP/1.1" 200 7172
[28/Oct/2016 15:51:46] "GET /admin/jsi18n/ HTTP/1.1" 200 3217
[28/Oct/2016 15:51:48] "GET /admin/owgame/owgameserver/add/ HTTP/1.1" 200 5355
[28/Oct/2016 15:51:48] "GET /admin/jsi18n/ HTTP/1.1" 200 3217
添加新服:服id:7-服ip:192.168.12.23-服称号:7服-服端口:8007
添加:7服,192.168.12.23
保管内容

已触发到保管的信号。

删除一个服

反省输入日记

[28/Oct/2016 15:54:27] "GET /admin/owgame/owgameserver/7/change/ HTTP/1.1" 200 5632
[28/Oct/2016 15:54:27] "GET /admin/jsi18n/ HTTP/1.1" 200 3217
[28/Oct/2016 15:54:31] "GET /admin/owgame/owgameserver/7/delete/ HTTP/1.1" 200 3035
删除7服,192.168.12.23
删除文件中的列表
[28/Oct/2016 15:54:43] "POST /admin/owgame/owgameserver/7/delete/ HTTP/1.1" 302 0
[28/Oct/2016 15:54:44] "GET /admin/owgame/owgameserver/ HTTP/1.1" 200 7323
[28/Oct/2016 15:54:44] "GET /admin/jsi18n/ HTTP/1.1" 200 3217

已触发删除信息。

在实操中,sigal handler写在signals模块下面。

然后需求在app的ready办法中援用这些handlers。

起首,先确保你的single.py 有被import过,如许django才干读取到你里面的注册的signals.

post_save 望文生义,是在save操纵之后触发。也即当你调用 model.save,实行保管后触发。update办法不会得罪该signals.

post_delete,是在delete操纵之后触发。也便是当你调用model.delete,model删除后才会触发。.filter.delete 不会触发该signals.

(看完/读完)这篇文章有何感想! msyz999明仕亚洲官网娱乐的分享…

发表评论

姓名 *
电子邮件 *
站点