如何使用Django拦截临时邮箱,仅允许Gmail等真实邮箱完成用户注册
临时邮箱拦截功能实现方案
步骤1:修改forms.py添加邮箱域名验证逻辑
我们通过Django表单自带的字段自定义清洗规则实现拦截,不需要调整原有视图代码,和现有逻辑耦合度最低:
from django.core.exceptions import ValidationError from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User # 定义允许的邮箱域名白名单,可根据需求自行增删 ALLOWED_EMAIL_DOMAINS = {'gmail.com', 'outlook.com', 'yahoo.com', 'hotmail.com'} class SginupForm(UserCreationForm): class Meta: model = User fields =('username', 'first_name','last_name','email','password1','password2' ) def clean_email(self): email = self.cleaned_data.get('email') if not email: return email # 提取邮箱域名并转为小写避免大小写匹配问题 domain = email.split('@')[-1].lower() if domain not in ALLOWED_EMAIL_DOMAINS: raise ValidationError('暂不支持当前邮箱域名注册,请使用Gmail、Outlook、Yahoo等官方邮箱') return email
步骤2:无需调整views.py代码
表单的clean_email方法会在调用form.is_valid()时自动执行,不符合域名规则的请求会直接返回表单错误提示,原有注册逻辑不需要做任何修改。
拓展说明
如果后续需要拦截更多新增的临时邮箱域名,也可以改用黑名单匹配模式:自己维护一份临时邮箱域名列表,判断用户输入的域名是否在黑名单内,存在则拦截。
内容的提问来源于stack exchange,提问作者ahmed belkhiri
相关产品推荐
相关产品推荐

