Django: Создание функционального представления формы входа и регистрации на одной странице - PullRequest
0 голосов
/ 16 февраля 2019

Я хочу создать целевую страницу, похожую на страницу с мышью, где она имеет форму регистрации и форму входа на панели навигации.В настоящее время я использую одну форму как для регистрации, так и для входа в forms.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 }} s, и каждый из них имеет отправкукнопка.

кнопка для регистрации {{ 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})

Возможно ли, что мне нужно создать 2 формы в моем forms.py?Когда я пытаюсь войти, он не проходит form.is_valid() в elif 'loginbtn' in request.POST:.Также обе формы имеют {% csrf_token %}.

1 Ответ

0 голосов
/ 27 февраля 2019

Я получил все для работы, просто удалив form.is_valid() и настроив вид после этого.

...