You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django无需修改视图、在models.py实现新增Order时自动发邮件方案咨询

Django 新订单自动发邮件实现方案

可行性说明

完全可行,无需修改视图层代码,直接通过Django内置的post_save信号在模型层实现即可,是满足你需求的最简方案。

具体实现步骤

1. 导入依赖模块

在你的models.py文件头部添加以下导入代码:

from django.db.models.signals import post_save
from django.dispatch import receiver
from django.core.mail import send_mail
from django.conf import settings

2. 添加信号监听逻辑

在你的Order模型类代码之后,新增信号接收器函数:

@receiver(post_save, sender=Order)
def send_new_order_notification(sender, instance, created, **kwargs):
    # 仅在订单首次创建时触发邮件发送,避免更新订单时重复发信
    if not created:
        return
    # 自定义邮件主题和内容,可根据业务需求调整字段
    mail_subject = f"新订单提交提醒:订单号 {instance._id}"
    mail_content = f"""
    您好,系统收到新订单,订单信息如下:
    订单编号:{instance._id}
    下单用户:{instance.user.username if instance.user else '未关联用户'}
    客户类型:{instance.get_customerType_display()}
    订单总金额:{instance.totalPrice} 元
    当前订单状态:{instance.get_status_display()}
    下单时间:{instance.createdAt.strftime('%Y-%m-%d %H:%M:%S')}
    """
    # 收件人列表,可根据需求修改,如需给用户发信可添加 instance.user.email
    receive_mails = ["your_admin@example.com"]
    # 调用Django邮件发送接口
    send_mail(
        subject=mail_subject,
        message=mail_content,
        from_email=settings.EMAIL_HOST_USER,
        recipient_list=receive_mails,
        fail_silently=False
    )

注意事项

  • 测试阶段建议保持fail_silently=False,方便排查邮件配置问题,上线后如果不需要因邮件发送异常中断订单创建流程,可改为True
  • 如需发送HTML格式的精美邮件,可在send_mail方法中添加html_message参数传入HTML内容
  • 高并发场景下建议将邮件发送逻辑替换为异步任务(如Celery),避免阻塞订单保存流程,普通低流量场景直接使用上述代码即可正常运行

内容的提问来源于stack exchange,提问作者Sohanur Rahman Shanto 16209570

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:27:03