django如何区分用户的电子邮件?

时间:2017-03-20 16:16:47

标签: django django-models django-views

我想用户注册他们的电子邮件" ac.uk"。 如果不是,他们会收到一些消息。

我不知道如何处理.. plz帮帮我..  如果不是request.FILES [' email']。endswith(" ac.uk"):将MultiValueDictKeyError带到/ LanguageExchange /.

这是我的观点。

def register(request):
 registered = False
 if request.method == 'POST':
    user_form = UserCreationForm(data=request.POST)
    if user_form.is_valid():       
        if not request.FILES['email'].endswith("ac.uk"):
             messages.warning(request, 'You need to use ac ID', extra_tags='alert') 
             return redirect('/LanguageExchange/')
        else:
            user = user_form.save()
            user.save()
            if 'Profile_image' in request.FILES:
                user.Profile_image = request.FILES['Profile_image'
                user.save()
                registered = True

    else:
        print(user_form.errors)

else:
    user_form = UserCreationForm()

return render(request,
            'LanguageExchange/register.html',
            {'user_form': UserCreationForm,
            'registered': registered})

1 个答案:

答案 0 :(得分:1)

您获得了MultiValueDictKeyError,因为email不是文件字段 - 值在request.POST而非request.FILES。但是,您应该尽可能避免从request.POST访问数据,而是使用form.cleaned_data['email']

话虽如此,验证表单中的电子邮件可能更好,而不是在视图中重定向。

class MyUserCreationForm(UserCreationForm):
    def clean_email(self):
        email = self.cleaned_data['email']
        if not email.endswith('ac.uk'):
            raise forms.ValidationError('You need to use ac ID')
        return email

然后,您可以将UserCreationForm替换为MyUserCreationForm,并从您的视图中删除电子邮件检查。

在您的视图中,您将user_form传递给模板上下文,以便您可以看到任何表单错误。

return render(request,
             'LanguageExchange/register.html',
             {'user_form': user_form,
              'registered': registered})