django form 验证邮箱后缀

我用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

 

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')

用正则表达式验证

email = forms.CharField(validators=[QQEmailValidator()])

@deconstructible
class QQEmailValidator(validators.RegexValidator):
    regex = r'^\d{5, 12}@qq\.com$'
    message = '请输入正确的qq邮箱'
    flags = 0