Django: проблема с входом пользователя в систему с использованием Bootstrap логина. html - PullRequest
0 голосов
/ 13 января 2020

Я использую Django 3.0.2 + Boostrap. Я создал страницу registration/login.html. Содержимое этой страницы показано ниже.

Страница отображается правильно, и большинство из них работает нормально. Однако я не могу войти на свой сайт через эту страницу. Я продолжаю получать Your username and password did not match. Please try again. Я могу войти на сайт admin без каких-либо проблем, если я использую то же имя пользователя / пароль. Я не уверен, что не так с моим login.html. Есть идеи?

{% extends "base.html" %}

{% block content %}

{% if form.errors %}
<p>Your username and password did not match. Please try again.</p>
{% endif %}

{% if next %}
    {% if user.is_authenticated %}
    <p>Your account does nohave access to this page. To proceed,please login with an account that has access.</p>
    {% else %}
    <p>Please login to see this page.</p>
    {% endif %}
{% endif %}

<div class="container-fluid">
    <div class="row justify-content-center">
        <div class="col-lg-6">
            <div class="p-5">

                <div class="text-center">
                    <h1 class="h4 text-gray-900 mb-4">Welcome Back!</h1>
                </div>

                <form class="user" method="post" action="{% url 'login' %}">
                    {% csrf_token %}
                    <div class="form-group">
                        <input type="text" class="form-control form-control-user" id="exampleInputUserName" placeholder="Username">
                    </div>
                    <div class="form-group">
                        <input type="password" class="form-control form-control-user" id="exampleInputPassword" placeholder="Password">
                    </div>
                    <input type="submit" class="btn btn-primary btn-user btn-block" value="Login">
                    <input type="hidden" name="next" value="{{ next }}">
                </form>

                <hr>

                <div class="text-center">
                    <a class="small" href="forgot-password.html">Forgot Password?</a>
                </div>
                <div class="text-center">
                    <a class="small" href="register.html">Create an Account!</a>
                </div>

            </div>
        </div>
    </div>
</div>

{% endblock %}

Содержание views.py:

from django.contrib.auth import logout


def logout_view(request):
    """Log out user from the website."""

    logout(request)

1 Ответ

1 голос
/ 13 января 2020

В ваших input типах отсутствует атрибут name. Согласно документам Mozilla :

Строка, указывающая имя для элемента управления вводом. Это имя отправляется вместе со значением элемента управления при отправке данных формы.

Таким образом, имя отправляется вместе с формой. Но что, если нет атрибута name? В той же документации объясняется:

Считайте имя обязательным атрибутом (даже если это не так). Если для ввода не указано имя или имя пустое, значение ввода не передается вместе с формой.

Таким образом, ваше имя пользователя и пароль не отправляются бэкэнду.

Вам необходимо предоставить атрибуты имени для ваших типов ввода.

<form class="user" method="post" action="{% url 'login' %}">
      {% csrf_token %}
      <div class="form-group">
           <input type="text" class="form-control form-control-user" id="exampleInputUserName" placeholder="Username" `name="username"`>
       </div>
       <div class="form-group">
            <input type="password" class="form-control form-control-user" id="exampleInputPassword" placeholder="Password" name="password">
       </div>
       <input type="submit" class="btn btn-primary btn-user btn-block" value="Login">
       <input type="hidden" name="next" value="{{ next }}">
</form>

Это проблема внешнего интерфейса, не связанная с Django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...