Django创建提交数据并发送邮件:保存视图变量时如何同步发送字段内容
解决方案
你只需要把send_mail里的固定主题、正文替换为你提交的字段内容即可,同时建议调整逻辑顺序,避免验证/存储失败时误发邮件。
修改后的完整代码
def gcreate(request): if request.method == 'POST': gmember = gunluk( adsoyad=request.POST['adsoyad'], adsoyad2=request.POST['adsoyad2'], vardiya=request.POST['vardiya'], aciklama=request.POST['aciklama'], incident=request.POST['incident'], alinanaksiyon=request.POST['alinanaksiyon'], ulasilmayanekip=request.POST['ulasilmayanekip'], ulasilmayanbilgisi=request.POST['ulasilmayanbilgisi'],) try: gmember.full_clean() except ValidationError as e: # 不要吞掉验证错误,返回给前端提示 messages.error(request, f"提交内容有误:{e}") return render(request, 'gcreate.html') # 先保存数据,再发邮件,避免存储失败发无效邮件 gmember.save() # 动态构造邮件主题和正文 mail_subject = f"新的日报提交:{gmember.adsoyad} - {gmember.vardiya}" mail_content = f""" 提交人:{gmember.adsoyad} 第二提交人:{gmember.adsoyad2} 班次:{gmember.vardiya} 说明:{gmember.aciklama} 事件:{gmember.incident} 采取的措施:{gmember.alinanaksiyon} 未联系到的团队:{gmember.ulasilmayanekip} 未联系信息:{gmember.ulasilmayanbilgisi} """ send_mail( mail_subject, mail_content, 'xx@xx.com', ['xx@xx.com'], fail_silently=False ) messages.success(request, 'Ekleme İşlemi Başarılı!') return redirect('/gunlukistakibi') else: return render(request, 'gcreate.html')
关键修改说明
- 调整了执行顺序:字段验证通过后先保存数据,再发送邮件,避免数据存储失败时发送无效邮件
- 修正了验证错误处理逻辑:不再直接吞掉ValidationError,而是将错误提示返回给前端,避免用户提交失败却无感知
- 动态构造邮件内容:使用f-string将存储的字段内容填充到邮件主题和正文中,你可以根据自己的需求调整内容排版
- 如果需要发送HTML格式的邮件,只需要在
send_mail参数中追加html_message=你构造的HTML内容即可
内容的提问来源于stack exchange,提问作者thedoctor
相关产品推荐
相关产品推荐

