django model对象修改_django开发-signals信号的使用

django中提供了信号机制,我们可以自定义需要执行的函数,当某个动作(如model对象被保存)发生时,可以触发自定义函数的执行。

django中有内置的信号,我们也可以自定义信号。

django中有以下常用内置信号:

django.db.models.signals.pre_save 在某个Model保存之前调用django.db.models.signals.post_save 在某个Model保存之后调用django.db.models.signals.pre_delete 在某个Model删除之前调用django.db.models.signals.post_delete 在某个Model删除之后调用django.core.signals.request_started 在建立Http请求时发送django.core.signals.request_finished 在关闭Http请求时发送

其他内置信号可以查看官方文档:

https://docs.djangoproject.com/en/2.1/topics/signals/

下面介绍下内置信号和自定义信号的使用。

1.内置信号

下面举一个post_save的例子,test01是app名称。

1.1 首先在test01/signals/handler.py中定义signal函数

3115c11c76dbc05ef1dfda6357b1112d.png

1.2 test01/views.py中定义视图

51125968809b1c7f1745f9195b882667.png

1.3 配置

test01/apps.py:

e9114e86168d113a82c637154c21f7a6.png

test01/__init__.py:

default_app_config = 'test01.apps.Test01AppConfig'

1.4 此时在postman中分别请求下面两个url:

http://127.0.0.1:8000/test01/user/

http://127.0.0.1:8000/test01/student/

打印的结果分别是:

0bcc2ea49f05dd2336cd047f46889de9.png

通过上面的结果,我们也可以看出信号中使用和不使用sender参数区别。

2.自定义信号

下面介绍下自定义信号的使用。

2.1 定义信号

test01/signals/signals.py:

53dccb85f3ff78a48864a110253222c3.png

2.2 在视图中触发自定义信号

test01/views.py:

860826ca37ca4f0e0fd2b418f13fc1c6.png

2.3 编写处理函数,即收到信号后要做哪些操作

test01/signals/handler.py:

ef6417fc01038f6fd95781e1049147b9.png

2.4 配置,与内置信号中的配置相同

2.5 请求下面的url

http://127.0.0.1:8000/test01/signal/

看到打印的结果如下:

my signal: signal_view {‘signal’: , ‘p1’: ‘wyzane’, ‘p2’: 18}

3.补充

我们配置的时候使用了AppConfig,下面补充下AppConfig的知识。

AppConfig是用来设置每个app属性的,上面的配置中定义了一个Test01AppConfig类来继承AppConfig,并在__init__.py中使用default_app_config来加载这个类。

重写在ready方法中的代码会在django运行的时候执行。

感兴趣的小伙伴可以看下官方文档的介绍:

https://docs.djangoproject.com/en/2.1/ref/applications/

今天就介绍到这里,如有问题欢迎私信交流。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值