u011371270
漆黑天使复活
采纳率100%
2021-03-08 16:56

django form 验证邮箱后缀

10
已采纳

我用django form的表单生产的注册界面

email = forms.EmailField(label='邮箱',
		widget=forms.EmailInput(attrs={'class':'form-control','placeholder':'请输入邮箱'}))

同时用form做邮箱验证邮箱是否已经注册,如下图,这个没问题

def clean_email(self):
		email = self.cleaned_data['email']	
		if User.objects.filter(email=email).exists():
			raise forms.ValidationError('邮箱已经被使用')	
		return email

同时我还想用form验证邮箱后缀是否为qq,如下图,但是就是不行,不是qq邮箱还是可以注册,怎么做邮箱后缀的验证?谢谢

def clean_qq_email(self):
		email = self.cleaned_data['email']
		if not '@qq' in email :
			raise forms.ValidationError('必须是用qq才可以注册')
		return email
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • qq_39019765 打杂的程序员 1月前
    import re
    
    dict_email = {
        r'[1-9]\d{4,7}@qq\.com$': 'qq邮箱',
        r'[a-z1-9][a-z1-9_]{2,14}[a-z0-9]@sina\.com$': '新浪普通邮箱',
        r'1[3456789]\d{9}@sina\.cn$': '新浪手机邮箱',
        r'[a-zA-Z]\w{5,17}@163\.com$': '网易普通邮箱',
        r'[a-zA-Z][a-zA-Z0-9_.]{4,19}@vip\.163\.com$': '网易VIP邮箱'
        }  
    
    
    def check(addr):
        n = 1
        for pattern, email in dict_email.items():
            if re.match(pattern, addr):
                print(f'{addr}为{email}')
                break
            elif n == len(dict_email):
                print(f'{addr}不是邮箱账号')
            else:
                n += 1
    
    
    check('143379@qq.com')
    check('143379@qq\.com')
    check('a823456@sina.com')
    check('a823456@sina.comg')
    check('15187632190@sina.cn')
    check('05187632190@sina.cn')
    check('A123456789@163.com')
    check('123456789A@163.com')
    check('a._0a2b3c@vip.163.com')
    check('.a_0a2b3c@vip.163.com')
    点赞 评论 复制链接分享
  • weixin_41908433 知雀的天空 1月前
    email = forms.CharField(validators=[QQEmailValidator()])
    
    @deconstructible
    class QQEmailValidator(validators.RegexValidator):
        regex = r'^\d{5, 12}@qq\.com$'
        message = '请输入正确的qq邮箱'
        flags = 0
    点赞 评论 复制链接分享
  • qq_39019765 打杂的程序员 1月前

    用正则表达式验证

    点赞 评论 复制链接分享

为你推荐