我想用户注册他们的电子邮件" 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})
答案 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})