我想创建一个与linkedin类似的登录页面,其中在导航栏上具有注册表单和登录表单。我目前在form.py中使用单一表单进行注册和登录:
forms.py
class UserRegisterForm(UserCreationForm):
firstname = forms.CharField(max_length=200, label='')
lastname = forms.CharField(max_length=200, label='')
email = forms.EmailField(label='')
class Meta:
model = User
fields = ['username', 'firstname', 'lastname', 'email', 'password1']
我的模板包括2个{{ form }}
,每个模板都有一个提交按钮。
注册{{ form }}
的按钮:
name='signupbtn' type='submit'
登录{{ form }}
的按钮:
name='loginbtn' type='submit'
现在,我无法尝试登录或验证我创建的用户(超级用户)。我的注册/登录视图如下:
def index(request):
if request.method == 'POST':
if 'signupbtn' in request.POST:
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Your account has been created! You may now login.')
return redirect('index')
elif 'loginbtn' in request.POST:
username = request.POST['username']
password = request.POST['password1']
form = UserRegisterForm(request.POST)
if form.is_valid():
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
form = UserRegisterForm()
return render(request, 'users/index.html', {'form': form})
是否可能需要在Forms.py中创建2个表单?当我尝试登录时,它不会超过form.is_valid()
下的elif 'loginbtn' in request.POST:
。两种形式也都有{% csrf_token %}
。
答案 0 :(得分:0)
只需移除form.is_valid()
并在此之后调整视图,我就可以正常工作。