Django не аутентифицирует пользователя - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь создать страницу входа на django. Сначала я попытался использовать:


from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.models import User, auth

# Create your views here.

def login(request):
    if request.method== 'POST':
        username = request.POST['username']
        password = request.POST['password']

        User = auth.authenticate(username=username,password=password)

        if User is not None:
            auth.login(request, User)
            return redirect("/")
        else:
            messages.info(request,'invalid credentials')
            return redirect('login')

    else:
        return render(request,'login.html') 

, но получил сообщение об ошибке: MultiValueDictKeyError в / accounts / login. Затем я изменил его на:

def login(request):
    if request.method== 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        User = auth.authenticate(username=username,password=password)

        if User is not None:
            auth.login(request, User)
            return redirect("/")
        else:
            messages.info(request,'invalid credentials')
            return redirect('login')

    else:
        return render(request,'login.html') 

, тогда единственная проблема в том, что он всегда показывает неверные учетные данные, даже когда я создал нового пользователя. Помогите пожалуйста.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Прежде всего вам нужно импортировать эти функции в django .contrib.auth

from django.contrib.auth import authenticate, login
""" 
     from django.contrib.auth.models import User
     don't need this import since authencate will directly
     check if the user you trying to authencate exist in the User model
"""

def login(request):
if request.method== 'POST':
    username = request.POST.get('username')
    password = request.POST.get('password')

    user = authenticate(username=username,password=password)

    if user is not None:
        login(request, user)
        return redirect("/")
    else:
        messages.info(request,'invalid credentials')
        return redirect('login')

else:
    return render(request,'login.html') 

попробуйте их и дайте мне знать, если это поможет

0 голосов
/ 10 июля 2020

Произошла ошибка при определении имени в файле html. Правильный способ такой:

<input type="text" name="username" placeholder="Enter username"><br>
<input type="password" name="password" placeholder="Enter Password"><br>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...