在尝试了其他堆栈溢出的多种解决方案后,我似乎无法让我的注册表单在Django中工作。
这是登记表
<h1>Register</h1>
<div>
<form method="POST" action="{% url 'register' %}"></form>
{% csrf_token %}
{{ form.as_p}}
<input type="submit" value="register" />
</div>
下面是views.py'
def register_page(request):
form = CustomUserCreateForm()
if request.method == 'POST':
form = CustomUserCreateForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.save()
login(request, user)
return redirect('login')
page = 'register'
context={'page':page, 'form':form}
return render(request, 'login_register.html', context)
forms.py'
class CustomUserCreateForm(UserCreationForm):
class Meta:
model = User
fields = ['username', 'email', 'name', 'password1', 'password2']
没有抛出任何错误,只是没有提交。我试着改变输入按钮功能,但它仍然不起作用。什么好主意吗?
我认为保存表单实例实际上并没有使user
成为可认证的用户对象
试试这个
if form.is_valid():
#You are not doing anything to user, so no need to commit=False
#user = form.save(commit=False)
form.save()
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
#Make sure user is an authenticated user object
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
#Handle no user as appropriate eg,
#else:
# messages.error(request,'Well that didn't work')