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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:33:03