Django技术问题求助:CBV无object属性、未填邮箱提交报错
问题2:Django 1.11 + django-floppy-forms 未输入邮箱点击发送触发错误
结合你说的场景(填邮箱正常发,空邮箱就报错),大概率是表单验证或视图逻辑没处理到位,给你几个排查和解决的方向:
先检查表单的邮箱字段规则
确保邮箱字段是必填的,并且用了正确的字段类型。虽然EmailField默认required=True,但有时候不小心改了就会出问题,建议明确写出来:from django import forms from floppyforms import EmailInput class ContactForm(forms.Form): email = forms.EmailField( widget=EmailInput(), required=True, error_messages={'required': '麻烦填一下邮箱地址哦'} ) # 其他字段...确保视图正确处理表单无效的情况
不管是CBV还是函数视图,一定要保证表单验证失败时,返回带错误信息的页面,而不是继续执行后续的发邮件/模型操作。比如用FormView的话:from django.views.generic.edit import FormView class ContactView(FormView): form_class = ContactForm template_name = 'contact.html' success_url = '/thank-you/' def form_valid(self, form): # 只有表单验证通过才会走到这儿,放心处理发邮件逻辑 email = form.cleaned_data['email'] # 你的发邮件代码 send_mail(...) return super().form_valid(form)要是用函数视图,记得
else分支要把带错误的表单传回模板,别漏了。检查floppy-forms的模板渲染
用floppy-forms的模板标签渲染表单,确保错误信息能正常显示给用户,这样用户空点发送时,前端就会提示,也能减少后端报错的概率:{% load floppyforms %} <form method="post"> {% csrf_token %} {% form form %} {% formrow form.email %} <!-- 其他字段 --> {% endform %} <button type="submit">发送</button> </form>回溯指向模型?检查是否提前调用了模型逻辑
如果报错回溯提到了模型代码,那可能是你在表单验证没通过的情况下,就试图操作模型(比如把空邮箱传给模型字段)。记住只有form_valid里才处理发邮件、模型操作这类逻辑,form_invalid里只负责返回错误页面就行。
内容的提问来源于stack exchange,提问作者user9192656
相关产品推荐
相关产品推荐

