>本教程探索了Django信号,这是Django项目中强大的通信机制。 我们将介绍他们在维护模块化和可扩展代码,检查内置信号的角色中的作用,并演示如何创建自定义信号。
>大型Django项目通常包含多个应用程序(例如,用户管理,订单,产品,电子商务系统中的付款)。尽管每个应用都关注特定功能,但它们必须无缝交互。信号促进了这种通信,允许应用程序对其他应用程序中的事件做出反应,而无需紧密耦合。例如,当应用程序确认订单时,>应用程序可以更新库存。 Django的信号调度器充当中介,实现了这种脱钩的通信。products
orders
>
> app更新了其库存。
orders
products
>
>发件人和接收器:>
>信号发送者是发出信号的任何python对象。接收器是响应发送信号执行的Python函数或方法。请注意,某些信号(尤其是内置的信号)被发送,无论注册接收器如何 设置示例django项目:>
为了说明信号使用情况,我们将创建一个示例电子商务项目: > django信号基础:
>内置的django信号: django提供了许多内置信号,可通过 : >型号的 结论:
mkdir my_shop
virtualenv
使用pip install virtualenv
(使用virtualenv venv
安装)。 创建并激活环境(pip install Django
django-admin startproject my_shop .
python manage.py startapp products
python manage.py startapp orders
和INSTALLED_APPS
。 将两个应用程序添加到settings.py
>。
Product
)和products/models.py
>(inOrder
)的模型。 运行迁移(orders/models.py
和python manage.py makemigrations
)。python manage.py migrate
>
Signal
receiver
。
django.dispatch
orders/signals.py
>order_confirmed = Signal()
>
import orders.signals
>import products.signals
>ready()
>apps.py
>在每个应用程序的order_confirmed.send(sender=order, ...)
> app的视图中使用orders
在订单确认后发送信号。@receiver(order_confirmed)
>在接收到products/signals.py
>时,请使用order_confirmed
django.db.models.signals
>(型号信号)和django.core.signals
>(请求/响应信号)等模块访问。 示例包括pre_save
,post_save
,request_started
和request_finished
>
使用内置信号:@receiver(post_save, sender=Order)
>信号。
post_save
Order
实践:
在创建新用户时,
post_save
在User
模型上使用Customer
post_save
>在发布新评论时,将电子邮件通知发送给博客作者。Comment
>
以上是了解Django中的信号的详细内容。更多信息请关注PHP中文网其他相关文章!