Модуль 'django.contrib.messages.constants' не имеет атрибута 'error'

Я работал над своим проектом django, и все казалось прекрасным, пока я просто не захотел войти в систему, и я обнаружил эту ошибку:

module 'django.contrib.messages.constants' has no attribute 'error'

Код, который отвечает за это, не трогали как минимум 2 месяца!

Вот вид:

from django.contrib.auth import authenticate
from django.conf.settings import *
from django.contrib import messages    
# Connexion
def loginview(request):
    if request.method == 'POST':
        usr = request.POST.get('email_kw')
        pwd = request.POST.get('pwd_kw')
        user = authenticate(request, username=usr, password=pwd)

        if user is not None:
            login(request, user)
            logger.info(f"Connexion de {request.user}")
            return redirect("dashboard")
        else:
            messages.error(request, "Erreur: Nom d'utilisateur ou mot de passe incorrects, veuillez réessayer.") # this is the line that causes the problem
            logger.error(f'Connexion de {request.user} echouee')
            return render(request, 'core/login.html', {'page_title': 'Se connecter'})
    if request.user.is_authenticated:
        return redirect("dashboard")
    return render(request, 'core/login.html', {'page_title': 'Se connecter'})

Это очень сложная проблема. А ответ прост.

Хотя вы импортировали правильный компонент (который является django.contrib.messages), вы также импортировали настройки, вероятно, для использования некоторых глобальных переменных.

Проблема здесь в том, что вы импортировали ВСЕ переменные и методы в settings.py, а поскольку вы используете сообщения, вы наверняка используете bootstrap alerts, следовательно, вы импортируете константы сообщений в ваш settings.py (django.contrib.messages.constants).

Во многих учебниках вас просят поставить вот это: from django.contrib.messages import constants as messages.

Теперь у вас есть следующее:

from django.conf.settings import *
from django.contrib import messages

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

Для решения этой проблемы вы можете просто переименовать константы в настройках на что-то другое, а не на сообщения. Или просто следуйте хорошей практике любой объектно-ориентированной программной инженерии, и никогда не используйте import *, всегда импортируйте только те переменные или функции, которые вам действительно нужны, и поэтому измените from django.conf.settings import * на from django.conf import settings и используйте settings.YOUR_VARIABLE, или, вы можете сделать также следующее: from django.conf.settings import YOUR_VARIABLE, YOUR_METHOD

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