Как сопоставить шаблон входа со встроенной формой входа в Django?

Я совсем новичок в Django и пытаюсь создать шаблон входа в систему. Я избегаю использования crispy-forms, чтобы иметь больше контроля и знаний о том, как данные отображаются на сайте. Я использую встроенную в Django форму входа. К сожалению, я застрял, потому что мой текущий login.html кажется недействительным и ничего не происходит после отправки POST с именем пользователя и паролем. Вот как это выглядит:

login.html

    <main class="form-signin">
      <form method="post" class="from-group">
        <h1 class="display-3 text-center mb-4 fw-normal" style="font-family:'Faster One'; box-shadow: none;">Test</h1>
        <h1 class="h3 mb-3 fw-normal">Please sign in</h1>
        {% csrf_token %}
        <div class="form-floating">
          <input type="text" class="form-control" id="floatingInput" placeholder="name@example.com">
          <label for="floatingInput">Username</label>
        </div>
        <div class="form-floating mt-3">
          <input type="password" class="form-control" id="floatingPassword" placeholder="Password">
          <label for="floatingPassword">Password</label>
        </div>
        <button class="w-100 btn btn-lg btn-primary" type="submit" value="Log in">Sign in</button>
      </form>
    </main>

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),
    path('accounts/', include("django.contrib.auth.urls")),
]

views.py

from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render
from poolcar.forms import ReservationForm


@login_required()
def home(request):
    return render(request, 'index.html')

[23/Apr/2022 09:59:41] "POST /accounts/login/ HTTP/1.1" 200 2358

[23/Apr/2022 09:59:46] "POST /accounts/login/ HTTP/1.1" 200 2358

POST отправляется с сообщением 200 OK, но кроме этого ничего не происходит - я все еще на странице входа, пользователь не аутентифицирован, валидация не работает и т.д. Поэтому мой вопрос заключается в том, что я сделал не так, и как именно работает связка между формой/видом входа и html-шаблоном?

Синтаксис html-циклирования формы следующий, где мы имеем доступ к конкретным field, field.label, non_field_errors, а также к конкретным ошибкам полей.

В вашем случае вы можете использовать следующим образом:

login.html

<main class="form-signin">
  <form method="post" class="from-group">
    <h1 class="display-3 text-center mb-4 fw-normal" style="font-family:'Faster One'; box-shadow: none;">Test</h1>
    <h1 class="h3 mb-3 fw-normal">Please sign in</h1>
        {% csrf_token %}
        {% if form.non_field_errors %}
            {% for error in form.non_field_errors  %}
            <div>
                {{error}}
            </div>
            {% endfor %}
        {% endif %}

        {% for field in form  %}
        <p>{{field.label_tag}} {{field}}</p>
        <br>
            {% for error in field.errors  %}
                <span>{{error}}</span>
            {% endfor %}
        {% endfor %}
    <button class="w-100 btn btn-lg btn-primary" type="submit" value="Log in">Sign in</button>
  </form>
</main>

И вы можете определить класс и идентификатор входа следующим образом:

forms.py

class MyForm(forms.Form):
    name=forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control','id': 'floatingInput'}))

Если бы вы также могли выложить views.py, было бы лучше

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