Функция Django Authenticate всегда возвращает девять, даже после внесения необходимых изменений в settings.py

Я пытаюсь создать систему входа в систему с помощью Django python. Хотя функция Authenticate всегда возвращает значение none, даже после внесения определенных изменений в settings.py, как было предложено в других ответах на StackOverflow. Я попробовал запустить этот код в режиме отладки в visual studio code и обнаружил, что проблема заключается только в функции authenticate, так как она всегда none, и код, следовательно, никогда не может войти в систему ни один пользователь.

Вот мой код:

  1. views.py(функция входа в систему)
from django.http import HttpResponse
from django.shortcuts import redirect, render
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.contrib import messages

# Create your views here.


def home(request):
    return render(request, 'Home_Page.html')


def signup(request):
    if request.user.is_anonymous:

        if request.method == 'POST':
            if User.objects.filter(username=request.POST.get('username').upper()).exists():
                messages.error(request, 'The username already exists')
            elif User.objects.filter(email=request.POST.get('email').lower()).exists():
                messages.error(request, 'The Email already exists')

            else:

                user = User.objects.create_user(username=request.POST.get('username').upper(), email=request.POST.get('email').lower(), password=request.POST.get(
                    'password'), first_name=request.POST.get('firstname'), last_name=request.POST.get('lastname'))

                user.save()

                return redirect('home')

        return render(request, 'Signup_Page.html')
    else:
        return redirect('/dashboard')


def login(request):
    if request.user.is_anonymous:
        if request.method == 'POST':
            user = authenticate(username=request.POST.get(
                'username'), password=request.POST.get('password'))
            if user is not None:
                login(request, user)
                return redirect('/dashboard')
            else:

                return render(request, 'Login_Page.html')
        else:
            return render(request, 'Login_Page.html')
    else:
        return redirect('/dashboard')


def logout(request):
    if not request.user.is_anonymous:
        logout(request)

        return HttpResponse("Home Page")
    return redirect('/')

  1. Login_Page.html
  1. Settings.py

Как указал @Iain Shelvington, проблема начинается с того, что пользователь создается с параметром username, установленным в uppercase -> username=request.POST.get('username').upper().

user = User.objects.create_user(username=request.POST.get('username').upper(), email=request.POST.get('email').lower(), password=request.POST.get('password'), first_name=request.POST.get('firstname'), last_name=request.POST.get('lastname'))

Тогда способ, которым вы передаете username в authenticate() - без upper().

user = authenticate(username=request.POST.get('username'), password=request.POST.get('password'))

Таким образом, вы можете удалить upper() из имени пользователя при создании пользователя, или добавить upper() к имени пользователя в authenticate().

Однако, я вижу, что у вас есть два метода под названием login(). Django login() и определенный метод login(). Это может вызвать некоторую проблему и у вас. Я бы предложил вам переименовать ваш определенный метод login() на что-то вроде: login_view(), чтобы он не затенял Django login(). Например:

# your defined method here; rename to login_view:
def login_view(request):
     ...
     # so it won't shadow the login method from Django
     login(request, users)
     ...

Иначе вы получите ошибку типа:

Тип исключения: TypeError at /login/ Exception Value: login() принимает 1 позиционный аргумент, но было дано 2

Вы можете взглянуть на этот ответ, чтобы лучше понять, если это необходимо.

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