Django:在单个页面中创建基于功能的视图“登录和注册”表单

时间:2019-02-16 14:14:03

标签: django django-models django-forms django-templates django-views

我想创建一个与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 %}

1 个答案:

答案 0 :(得分:0)

只需移除form.is_valid()并在此之后调整视图,我就可以正常工作。