Как сопоставить шаблон входа со встроенной формой входа в 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, было бы лучше