Почему при входе в django возникает ошибка, что имя пользователя или пароль не существуют?

Вопрос или проблема

У меня это в терминале

'invalid_login': 'Пожалуйста, введите корректное %(username)s и пароль. Обратите внимание, что оба поля могут быть чувствительными к大小写.', 'inactive': 'Эта учетная запись неактивна.'}
[

но я сохранил свое имя пользователя и пароль через браузер, установив очень распространенное имя пользователя и пароль, которые невозможно написать неправильно

может проблема кроется в форме, используемой во время регистрации, или это происходит из-за формы регистрации, или из-за моделей?

Мои модели

from django.db import models
from django.contrib.auth.models import User


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=255, blank=True)
    last_name = models.CharField(max_length=255, blank=True)
    bio = models.CharField(max_length=255, blank=True)
    image = models.ImageField(blank=True)

Формы:

from django import forms
from django.contrib.auth.models import User
from users.models import Profile
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm

class ProfileRegistrationForm(UserCreationForm):
    username = forms.CharField(required=True, max_length=30, widget=forms.TextInput(attrs={'placeholder': 'Введите имя пользователя'}))
    email = forms.EmailField(required=True, widget=forms.EmailInput(attrs={'placeholder': 'Введите электронную почту'}))
    password1 = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Введите пароль'}), label="Пароль")
    password2 = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Подтвердите пароль'}), label="Пароль")

    class Meta:
        model = User
        fields = ['first_name', 'last_name','username', 'email', 'password1', 'password2']

    def save(self, commit=True):
        user = super().save(commit=False)
        user.email = self.cleaned_data['email']

        if commit: 
            user.save()

        profile = Profile(user=user, first_name=self.cleaned_data['first_name'],
                          last_name=self.cleaned_data['last_name'])

        if commit:
            profile.save()
        
        return profile
    
    def clean_username(self):
        username = self.cleaned_data['username'].lower()
        new = User.objects.filter(username=username)
        if new.count():
            raise forms.ValidationError("Пользователь уже существует")
        return username
    
    def clean_email(self):
        email = self.cleaned_data['email'].lower()
        new = User.objects.filter(email=email)
        if new.count():
            raise forms.ValidationError("Электронная почта уже используется")
        return email
    
    def clean_password2(self):
        password1 = self.cleaned_data['password1']
        password2 = self.cleaned_data['password2']
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError("Пароли не совпадают")
        return password2
    
        


class ProfileLoginForm(AuthenticationForm):
    username = forms.CharField(max_length=255, required=True)
    password = forms.CharField(widget=forms.PasswordInput)

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


и представление:

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .forms import ProfileLoginForm, ProfileRegistrationForm
from django.contrib import messages
from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import AuthenticationForm



def login_user(request):
    if request.method == 'POST':
        form = AuthenticationForm(request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return redirect('profile')
        else:
            print(form.error_messages)  
    else:
        form = ProfileLoginForm()
    return render(request, 'login.html', {'form': form})

def register(request):
    if request.method == 'POST':
        form = ProfileRegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, 'Регистрация успешна')
            return redirect('login')
    else:
        form = ProfileRegistrationForm
    return render(request, 'register.html', {'form': form})

@login_required
def profile(request):
    render(request, 'profile.html', {'profile': profile})




Сначала я попытался использовать свою собственную форму входа, но затем я начал использовать базовую AuthenticationForm, но проблема все еще остается

Ответ или решение

Отвечая на ваш вопрос о проблеме с входом в Django, когда система выдает ошибку «имя пользователя или пароль не существует», давайте разберем эту ситуацию более детально. Сначала обратим внимание на вывод в терминале:

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

Эта ошибка может возникать по нескольким причинам, и в вашем случае стоит обратить внимание на несколько ключевых аспектов:

1. Чувствительность к регистру

Как указано в сообщении об ошибке, как имя пользователя, так и пароль могут быть чувствительны к регистру. Убедитесь, что вы вводите эти данные точно так, как они были зарегистрированы. Например, если имя пользователя было создано с заглавной буквы, вводите его именно так.

2. Проверка модели пользователя

Ваш код модели пользователя (User) выглядит корректно, но стоит убедиться, что учетная запись пользователя действительно была создана и активирована. Существуют следующие аспекты, которые необходимо проверить:

  • Создание учетной записи: Проверьте, действительно ли ваша учетная запись была создана. Попробуйте получить доступ к базе данных, чтобы убедиться, что ваш пользователь присутствует в таблице.
  • Активность учетной записи: Если учетная запись пользователя была создана, убедитесь, что она активна. В Django у модели пользователя есть поле is_active, которое должно быть установлено в True.

3. Формы и валидация

Ваша форма регистрации (ProfileRegistrationForm) выглядит правильно, но вам стоит проверить логику валидации и сохранения:

  • Убедитесь, что вы не получаете ошибок в процессе регистрации. Любая ошибка валидации должна уведомить вас о том, что учетная запись не была создана.
  • Когда вы используете ваш метод save, убедитесь, что пользователи и профили успешно сохраняются. Например, вы можете добавить отладочные сообщения внутри метода, чтобы проверить, была ли создана учетная запись.

4. Логика авторизации

В функции login_user вы используете стандартную форму AuthenticationForm для выполнения входа. Обратите внимание на следующие аспекты:

def login_user(request):
    if request.method == 'POST':
        form = AuthenticationForm(request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return redirect('profile')
        else:
            print(form.error_messages)  
    else:
        form = ProfileLoginForm()
    return render(request, 'login.html', {'form': form})
  • Лучше использовать вашу форму ProfileLoginForm, чтобы обеспечить единообразие с вашей логикой валидации.
  • Проверьте, отлаживается ли form.is_valid(). Если оно возвращает False, вы должны иметь возможность увидеть ошибки, которые возникают.

5. Устранение ошибок

Если вы все еще испытываете трудности, попробуйте следующее:

  • Добавьте отладочные сообщения, чтобы лучше понять, где возникает проблема (например, распечатка form.errors).
  • Убедитесь, что в вашей базе данных нет записей с одинаковыми именами пользователей или адресами электронной почты.

Заключение:

Ваша проблема может быть связана с чувствительностью к регистру, состоянием учетной записи или проблемами с формами. Проверьте эту информацию, и вы, скорее всего, найдете решение. Помните, что важно писать оригинальные отсутствующие коды без использования устоявшихся шаблонов, чтобы обеспечить чистоту и читаемость вашего кода. Используйте отладку как средство для диагностики проблем, и вы сможете определить источник ошибки.

Оцените материал
Добавить комментарий

Капча загружается...