Django信号量
摘自官方文档
使用

信号
send()方法发送所有内置信号。模型信号
django.db.models.signals模块定义了模型系统发送的一组信号。__init__()或者save()您可以在自己的代码中覆盖。weak=False在调用信号时通过connect()。sender通过指定其完整的应用标签来连接接收器时,可以懒惰地引用模型信号模型。例如,应用程序中Answer定义的 模型polls可以引用为'polls.Answer'。在处理循环导入依赖项和可交换模型时,这种引用非常方便。pre_init
- django.db.models.signals.pre_init
__init__()方法的开头发送。sender- 刚创建实例的模型类。
args- 传递给的位置参数列表
__init__(): kwargs- 传递给关键字参数的字典
__init__():
pre_init处理程序的参数是:| 争论 | 值 |
sender |
Poll (班级本身) |
args |
[](一个空列表,因为没有传递给位置参数__init__()。) |
kwargs |
{'question': "What's up?", 'pub_date': datetime.now()} |
post_init
- django.db.models.signals.post_init
__init__()方法在方法完成时发送。sender- 如上所述:刚创建实例的模型类。
instance- 刚刚创建的模型的实际实例。
pre_save
- django.db.models.signals.pre_save
save()方法的开头发送的。sender- 模型类。
instance- 保存的实际实例。
raw- 布尔值;
True如果模型完全按照提供的方式保存(即加载夹具时)。不应该查询/修改数据库中的其他记录,因为数据库可能尚未处于一致状态。 using- 正在使用的数据库别名。
update_fields- 要传递给更新的字段集
Model.save(),或者None如果update_fields未传递给它save()。
post_save
- django.db.models.signals.post_save¶
sender- 模型类。
instance- 保存的实际实例。
created- 布尔值;
True如果创建了新记录。 raw- 布尔值;
True如果模型完全按照提供的方式保存(即加载夹具时)。不应该查询/修改数据库中的其他记录,因为数据库可能尚未处于一致状态。 using- 正在使用的数据库别名。
update_fields- 要传递给更新的字段集
Model.save(),或者None如果update_fields未传递给它save()。
pre_delete
- django.db.models.signals.pre_delete
sender- 模型类。
instance- 要删除的实际实例。
using- 正在使用的数据库别名。
pre_delete
- django.db.models.signals.post_delete
sender- 模型类。
instance-
要删除的实际实例。请注意,该对象将不再存在于数据库中,因此请谨慎对待此实例。
using- 正在使用的数据库别名。
m2m_changed
- django.db.models.signals.m2m_changed
ManyToManyField在模型实例上更改a 时发送。严格来说,这不是一个模型信号,因为它是由它发送的 ManyToManyField,但由于它补充了 pre_save/ post_save和pre_delete/ post_delete当跟踪模型的变化时,它包含在这里。sender- 中间模型类描述
ManyToManyField。定义多对多字段时,将自动创建此类; 您可以使用through多对多字段中的属性访问它 。 instance- 更新多对多关系的实例。这可以是与之相关
sender的类的实例,也可以ManyToManyField是与之相关的类的 实例。 action-
一个字符串,指示对关系执行的更新类型。这可以是以下之一:
"pre_add"- 在将一个或多个对象添加到关系之前发送。
"post_add"- 将一个或多个对象添加到关系后发送。
"pre_remove"- 在从关系中删除一个或多个对象之前发送。
"post_remove"- 从关系中删除一个或多个对象后发送。
"pre_clear"- 在关系被清除之前发送。
"post_clear"- 关系清除后发送。
reverse- 指示关系的哪一侧更新(即,是否正在修改正向或反向关系)。
model- 从关系中添加,删除或清除的对象的类。
pk_set-
对于
pre_add,post_add,pre_remove和post_remove的动作,这是一组已被添加到或从关系移除主键值。对于pre_clear和post_clear行动,这是None。 using- 正在使用的数据库别名。
Pizza可以有多个Topping对象,则建模如下:class Topping(models.Model):
# ...
pass class Pizza(models.Model):
# ...
toppings = models.ManyToManyField(Topping)
如果我们连接这样的处理程序:
from django.db.models.signals import m2m_changed def toppings_changed(sender, **kwargs):
# Do something
pass m2m_changed.connect(toppings_changed, sender=Pizza.toppings.through)
m2m_changed处理程序的参数(toppings_changed在上面的例子中)将是:| 争论 | 值 |
sender |
Pizza.toppings.through (中级m2m级) |
instance |
p(Pizza正在修改的实例) |
action |
"pre_add"(后跟一个单独的信号"post_add") |
reverse |
False(Pizza包含 ManyToManyField,所以这个调用修改了前向关系) |
model |
Topping(添加到的对象的类 Pizza) |
pk_set |
{t.id}(因为只添加到关系中)Topping t |
using |
"default" (因为默认路由器在这里发送写入) |
m2m_changed处理程序的参数是:| 争论 | 值 |
sender |
Pizza.toppings.through (中级m2m级) |
instance |
t(Topping正在修改的实例) |
action |
"pre_remove"(后跟一个单独的信号"post_remove") |
reverse |
True(Pizza包含 ManyToManyField,所以这个调用修改了反向关系) |
model |
Pizza(从中删除的对象的类 Topping) |
pk_set |
{p.id}(因为只从关系中删除)Pizza p |
using |
"default" (因为默认路由器在这里发送写入) |
class_prepared
- django.db.models.signals.class_prepared
AppConfig.ready()在app注册表完全填充后运行,因此无法在该方法中连接接收器。一种可能性是连接它们AppConfig.__init__(),注意不要导入模型或触发对app注册表的调用。sender- 刚准备的模型类。
管理信号
pre_migrate
- django.db.models.signals.pre_migrate
migrate在开始安装应用程序之前由命令发送。对于缺少models模块的应用程序,它不会发出。senderAppConfig要迁移/同步的应用程序的实例。app_config- 与...相同
sender。 verbosity-
表示manage.py在屏幕上打印的信息量。请参阅
--verbosity旗帜了解详情。侦听的函数pre_migrate应根据此参数的值调整它们输出到屏幕的内容。 interactive-
如果
interactive是True,则提示用户在命令行上输入内容是安全的。如果interactive是False,侦听此信号的功能不应尝试提示任何内容。 using- 命令将在其上运行的数据库的别名。
plan- 将用于迁移运行的迁移计划。虽然该计划不是公共API,但这允许在必要时知道该计划的极少数情况。计划是两元组的列表,第一项是迁移类的实例,第二项显示迁移是否已回滚(
True)或已应用(False)。 appsApps在迁移运行之前包含项目状态的实例。应该使用它来代替全局apps注册表来检索要对其执行操作的模型。
post_migrate
- django.db.models.signals.post_migrate
senderAppConfig刚刚安装的应用程序的实例。app_config- 与...相同
sender。 verbosity-
表示manage.py在屏幕上打印的信息量。请参阅
--verbosity旗帜了解详情。侦听的函数post_migrate应根据此参数的值调整它们输出到屏幕的内容。 interactive-
如果
interactive是True,则提示用户在命令行上输入内容是安全的。如果interactive是False,侦听此信号的功能不应尝试提示任何内容。 using- 用于同步的数据库别名。默认为
default数据库。 plan- 用于迁移运行的迁移计划。虽然该计划不是公共API,但这允许在必要时知道该计划的极少数情况。计划是两元组的列表,第一项是迁移类的实例,第二项显示迁移是否已回滚(
True)或已应用(False)。 appsApps迁移运行后包含项目状态的实例。应该使用它来代替全局apps注册表来检索要对其执行操作的模型。
AppConfig像这样注册一个回调 :class Topping(models.Model):
# ...
pass class Pizza(models.Model):
# ...
toppings = models.ManyToManyField(Topping)
如果我们连接这样的处理程序:
from django.db.models.signals import m2m_changed def toppings_changed(sender, **kwargs):
# Do something
pass m2m_changed.connect(toppings_changed, sender=Pizza.toppings.through)
AppConfig实例作为sender参数,请确保已注册信号 ready()。AppConfig对于使用修改集INSTALLED_APPS(例如,当覆盖设置时)运行的测试,将重新创建s,并且应为每个新AppConfig实例连接此类信号。请求/响应信号
request_started
- django.core.signals.request_started
sender- 处理程序类 - 例如
django.core.handlers.wsgi.WsgiHandler- 处理请求。 environenviron提供给请求的字典。
request_finished
- django.core.signals.request_finished
sender- 处理程序类,如上所述。
got_request_exception
- django.core.signals.got_request_exception
sender- 处理程序类,如上所述。
request- 的
HttpRequest对象。
测试信号
setting_changed
- django.test.signals.setting_changed
django.test.TestCase.settings()上下文管理器或 django.test.override_settings()装饰器/上下文管理器更改设置的值时,将发送此信号 。enter参数来区分这两者。django.core.signals以避免django.test在非测试情况下导入。sender- 设置处理程序。
setting- 设置的名称。
value- 更改后的设置值。对于最初不存在的设置,在“拆卸”阶段,
value是None。 enter- 布尔值;
True如果应用该设置,False则恢复。
数据库包装器
connection_created
- django.db.backends.signals.connection_created
sender- 数据库包装类 - 即
django.db.backends.postgresql.DatabaseWrapper或django.db.backends.mysql.DatabaseWrapper等 connection- 已打开的数据库连接。这可以在多数据库配置中使用,以区分来自不同数据库的连接信号。
Django信号量的更多相关文章
- Django 信号量
参考:https://www.cnblogs.com/wupeiqi/articles/5246483.html 一.信号:就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者 ...
- 知识补充之Django信号量
信号 抛砖引玉 1.如何对数据库的增加操作记录日志 2.信号比中间件的区别 Django中提供了"信号调度",用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特 ...
- Django REST framework+Vue 打造生鲜超市(一)
一.项目介绍 1.1.掌握的技术 Vue + Django Rest Framework 前后端分离技术 彻底玩转restful api 开发流程 Django Rest Framework 的功能实 ...
- Django REST framework+Vue 打造生鲜超市(六)
七.用户登录与手机注册 7.1.drf的token (1)INSTALL_APP中添加 INSTALLED_APPS = ( ... 'rest_framework.authtoken' ) toke ...
- Django+Vue打造购物网站(五)
注册和登陆 drf的认证 http://www.django-rest-framework.org/api-guide/authentication/ settings.py文件的配置 INSTALL ...
- drf信号量
Django信号量回顾及drf信号量常用操作 一.在写接口视图时,保存/删除/更新数据前后需要对序列化后的数据进行处理的方法: 1.重写mixins.CreateModelMixin中恩的create ...
- Django进阶知识
drf学习之Django进阶点 一.Django migrations原理 1.makemigrattions: 相当于在每个app下的migrations文件夹下生成一个py脚本文件用于创建表或则修 ...
- Python全栈开发之21、django
http://www.cnblogs.com/wupeiqi/articles/5237704.html http://www.cnblogs.com/wupeiqi/articles/5246483 ...
- 1- vue django restful framework 打造生鲜超市
Vue+Django REST framework实战 使用Python3.6与Django2.0.2(Django-rest-framework)以及前端vue开发的前后端分离的商城网站 项目支持支 ...
随机推荐
- Jdbc Driver驱动和ServerTimeZone时区的的问题
一.JDBC驱动的版本号以及名称问题 区别: com.mysql.jdbc.Driver 是 mysql-connector-java 5中的 com.mysql.cj.jdbc.Driver 是 m ...
- composer之predis
安装: composer require predis/predis 即可 predis是PHP连接Redis的操作库,由于它完全使用php编写,大量使用命名空间以及闭包等功能,只支持php5 ...
- handlebars杂记
1.{{{caption}}}三个花括号,可以解析 空格 变成 ‘空格’. 2.数据是posts:[{ }]数组时候,可以用{{posts.length}}取得其数组长度 3.handl ...
- Git 生成.gitinore忽略文件
Git 生成.gitinore忽略文件 CD到指定目录下: touch .gitinore .gitinore忽略文件 三种方法: # 以'#'开始的行,被视为注释.(#是注释的意思) # 忽略掉所 ...
- 【应用容器引擎】Docker笔记
一.Docker是什么? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化.它是一个轻量级容器技 ...
- Linux上安装JDK1.8,tomcat9,以及mysql8的步骤
(该篇是在centos7上安装JDK1.8.0_201 tomcat9.0.16 和 mysql8.0.15) 一.安装JDK 方式一 1.首先,下载JDK(链接http://www.oracle. ...
- Vue基础第三章 - 计算属性
1.计算属性介绍 在第二章中我们介绍了在Vue的{{}}中可以使用一些简单的表达式进行计算,但是当表达式过长或者逻辑过于复杂就会变得不易理解和维护,比如第二章的示例{{ text.split(',') ...
- JQuery 处理 微擎传递过去数据
JQuery 处理 微擎传递过去数据 PS:微擎得到的数据大多数是数组(我们这里处理数组) 将数组使用 json_encode() 函数处理成 JSON 格式 前端在 script 中使用 引号 将变 ...
- 新建ext4分区及开机挂载
1.查看新的20G硬盘是否已经挂在完毕. 2.使用fdisk命令创建主分区 3.再将分区设置完毕之后,查看磁盘分区是否创建完成. 2.使用mkfs.ext4命令将新创建的分区进行格式化为: 1)blo ...
- python数据类型基础与解压缩
''' python数据类型基础与解压缩 ''' # a = 10 # b = 10 # c = 10 # 定义变量就是拿来用的, # 链式赋值 a = b = c = 10 print(a, b, ...