Как избежать запроса пользователя на странице входа при использовании context_processors.py в Django? - PullRequest
1 голос
/ 18 февраля 2020

Я хотел передать переменные с пользовательской информацией, которая связана с моделью Clients через OneToOneField с django.contrib.auth.models, в файл base.html.

Итак, я создал context_processors.py со следующим кодом

from django.contrib.auth.models import User

    def userData(request):  
        user = request.user
        u = User.objects.get(username=user)
        us = u.clients.first_name
        uv = u.clients.avatar
        return {
            'u': u,
            'us': us,
            'uv': uv
        }

Все работало нормально, пока я не вышел из системы.

Когда я пытаюсь войти снова, я получаю URL accounts/login и получаю

DoesNotExist at /accounts/login/
User matching query does not exist.

1 Ответ

3 голосов
/ 18 февраля 2020

Ну, ваш request.user равен уже User, поэтому нет смысла его снова извлекать.

Вы можете просто проверить, вошел ли пользователь в систему:

def userData(request):
    if <b>request.user.is_authenticated</b>:
        return {
            'u': request.user,
            'us': request.user.clients.first_name,
            'uv': request.user.clients.avatar,
        }
    return {}

Примечание : имя clients является plular , поэтому предлагается набор из Client с. Обычно имена моделей в единственном числе (поэтому Client вместо Clients), и связанное имя OneToOneField должно, если вы укажете это самостоятельно, также быть единственным. .

...