我知道这个问题已经问了很多,大多数情况下是由于HttpResponse
中的渲染或views.py
导致的,我仔细检查了一下,但是代码对我来说看起来不错,不知道在哪里问题是。
这是一个非常基本的Django表单的views.py
文件,但我无法正常工作
def register(request):
registered = False
if request.method == 'POST':
user_form = UserForm(data = request.POST)
profile_form = UserProfileInfoForm(data = request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_from.save()
user.set_password(user.password)
user.save()
profile = profile_form.save(commit = False)
profile.user = user
if 'profile_pic' in request.FILES:
profile.profile_pic = request.FILES['profile_pic']
profile.save()
registered = True
else:
return (user_form.errors,profile_form.errors)
else:
user_form = UserForm()
profile_form = UserProfileInfoForm()
return render(request,'basic_app/register.html',{'user_form': user_form,
'profile_form':profile_form,
'registered':registered})
答案 0 :(得分:1)
您不能return (user_form.errors, profile_form.errors)
,因为它不是HttpResponse
对象。在这种情况下,服务器应返回什么响应。
通常情况下,如果表单无效,服务器将重新呈现内容。如果正确呈现该表单,它将显示错误。
请注意,如果POST请求成功,通常应重定向以实现Post/Redirect/Get pattern [wiki]。您可能还想使用UserCreationForm
[Django-doc]。这样将以正确的方式(使用.set_password(..)
设置用户密码,并运行密码验证程序(如果已配置)。
因此,您可以按以下方式重写视图,但是您可能应该将UserForm
替换为UserCreationForm
:
from django.shortcuts import redirect
def register(request):
if request.method == 'POST':
user_form = UserForm(data=request.POST)
profile_form = UserProfileInfoForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_from.save(commit=False)
user.set_password(user.password)
user.save()
profile = profile_form.save(commit=False)
profile.user = user
if 'profile_pic' in request.FILES:
profile.profile_pic = request.FILES['profile_pic']
profile.save()
return redirect('name-of-view')
else:
user_form = UserForm()
profile_form = UserProfileInfoForm()
return render(
request,
'basic_app/register.html',
{'user_form': user_form, 'profile_form':profile_form })