Как войти в систему с учетными данными пользователя в Django? - PullRequest
0 голосов
/ 30 декабря 2018

Я работаю над простым приложением для входа и выхода в Django.

Я написал два представления, одно для входа в систему, а другое для регистрации.

Представление реестра работает, как и ожидалось.Но при входе в систему возникают проблемы.

Я использую form.is_valid() в виде входа в систему.Вот где возникает проблема.Если я печатаю форму в блоке else, он говорит: Пользователь с таким именем уже существует .Это происходит еще до попытки аутентификации пользователя.Кто-нибудь, помогите мне с этим.

from django.contrib.auth import authenticate
from django.contrib.auth.models import User
from django.http.response import HttpResponse
from django.shortcuts import render
from notes.forms import UserForm

def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    elif request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(username=username, password=password)
            if user:
                login(request, user)
                return HttpResponse("Logged in")
            else:
                return HttpResponse("Wrong creds")
        else:
            print(form)
            return HttpResponse("else of is_valid()")

def register(request):
    if request.method == 'GET':
        return render(request, 'register.html')
    elif request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            email = form.cleaned_data['email']
            existing = User.objects.filter(username=username)
            if existing:
                return HttpResponse('Username is already taken')
            else:
                User.objects.create(username=username, password = password, email=email)
                return HttpResponse("User created with "+ username +" username")
        else:
            return HttpResponse("Hi")

forms.py

from django.contrib.auth.models import User
from notes.models import Note
from django import forms


class NoteForm(forms.ModelForm):

    class Meta:
        model = Note
        fields = '__all__'

class UserForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ['username', 'email', 'password']

1 Ответ

0 голосов
/ 30 декабря 2018

Вызов form.is_valid() подтвердит форму, это делается через несколько шагов .В зависимости от полей модели он также проверяет уникальность данных .

User [Django-doc] модель имеет ограничение уникальности для username, поэтому UserForm может быть действительным, только если username еще не взято или когда форма содержит экземпляр, который уже хранится в базе данных.

Поэтому я думаю, что было бы лучше создать LoginForm, как это делает Django с AuthenticationForm [Django-doc] [GitHub] .Например:

class UserForm(forms.<b>Form</b>):
    username = forms.CharField()
    password = forms.CharField()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...