Аутентификация входа пользователя в Django

Я хочу зарегистрировать пользователя на простом веб-сайте. Я пытался создать свою собственную аутентификацию входа, но она отправляет эту ошибку:

AttributeError at /login/ , объект 'QuerySet' не имеет атрибута 'pk'

вот код (views.py) :

...
from django.contrib.auth import login as login_module

def login(request):
if request.method == "POST":
    Login = LoginFrom(request.POST)
    if Login.is_valid():
        user = Login.cleaned_data
        if User.objects.filter(username=user['username']).exists():
            user_info = User.objects.filter(username=user['username'] , 
                                            password=user['password']).values('name')
            if user_info.exists():
                login_module(request, user_info)
                messages.success(request, 'welcome  {}'.format(user_info[0]['name'] ) , 'welcome_message')
            else:
                messages.error(request, 'wrong password', 'password_message')
        else:
            messages.error(request, 'username doesn\'t exist', 'username_message')    
else:
    Login = LoginFrom()
return render(request, 'login.html')

Затем я заменил его на этот код, взятый из документа django; это привело меня к другой проблеме, которая всегда возвращает 'None':

views.py

...
...
from django.contrib.auth import authenticate
from django.contrib.auth import login as login_module

def login(request):
if request.method == "POST":
    Login = LoginFrom(request.POST)
    if Login.is_valid():
        cd = Login.cleaned_data
        user = authenticate(request, username = cd['username'], password = cd['password'])
        if user is not None:
            login_module(request, user)
            messages.success(request, 'login', 'welcome_message')
        else:
            messages.error(request, 'error (none)', 'error_message')
else:
    Login = LoginFrom()
return render(request, 'login.html')

(form.py) в обоих вариантах:

class LoginFrom(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)

я пропустил какую-то часть или должен установить какую-то настройку?

В вашем первом решении,

password=user['password']

всегда будет неудачным, поскольку пароль, сохраненный в таблице auth_user по умолчанию, будет иметь хэшированный пароль.

Я попробовал второе решение, и оно работает нормально. Это представление входа не может вернуть None, потому что единственный оператор возврата возвращает метод render.

Поделитесь, пожалуйста, шаблоном login.html.

Вернуться на верх