django форма входа возвращает объект 'AnonymousUser' без атрибута '_meta' - PullRequest
0 голосов
/ 16 июня 2020

Я работаю над django веб-приложением. В этом веб-приложении у меня есть страница входа. Но когда я нажимаю кнопку входа в систему, я получаю следующее сообщение об ошибке

'AnonymousUser' object has no attribute '_meta'

. Я попытался найти это в Интернете и нашел эти ссылки в StackOverflow. ссылка1 и ссылка2 . Но ответы, представленные в этих ссылках, похоже, не работают для меня.

Это мой код пока views.py

def login_page(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        user = form.get_user()
        login(request, user)

        if form.is_valid():
            return redirect('global:homepage')

    else:
        form = AuthenticationForm()
    return render(request, 'accounts/login.html', {'form': form})

login. html

<form class="" action="{% url 'accounts:login' %}" method="post">
    {% csrf_token %}
    {% for field in form %}
    <p>
        <div class="form-group">
            {% render_field field class="form-control" placeholder=field.label %}
            {% if field.help_text %}
            <p class="help-block"><small>{{ field.help_text }}</small></p>
            {% endif %}
        </div>

        {% for error in field.errors %}
        <p style="color: red">{{ error|add_class:'text-danger' }}</p>
        {% endfor %}
    </p>
    {% endfor %}
    <button type="submit" class="btn btn-primary btn-block btn-lg mt-5">Log in</button>
</form>

Не уверен, что я делаю не так или что означает сообщение об ошибке

1 Ответ

2 голосов
/ 16 июня 2020

Вам необходимо позвонить form.is_valid() перед получением и входом в систему пользователя, так как они могли не предоставить правильные учетные данные

def login_page(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST)
        if form.is_valid():
            user = form.get_user()
            login(request, user)
            return redirect('global:homepage')
    else:
        form = AuthenticationForm()
    return render(request, 'accounts/login.html', {'form': form})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...