Я хочу иметь возможность настроить форму входа в систему, но когда моя страница входа отображается, форма входа не отображается.
Я пытался сделать это так, как настроил форму регистрации, но у меня всегда одна и та же проблема. .
Я почти уверен, что мои settings.py и urls.py верны («inscription» - это имя приложения моей аутентификации):
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'home.apps.HomeConfig',
'inscription.apps.InscriptionConfig',
]
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from inscription import views as i
from home import views as h
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('home.urls')),
path('accueil/', h.index, name='accueil'),
path('inscription/', i.inscription, name='inscription'),
path('connexion/', i.connexion, name='connexion'),
path('deconnexion/', i.deconnexion, name='deconnexion'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Я создал форму входа на основе существующей AuthenticationForm ( forms.py):
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
class FormulaireConnexion(AuthenticationForm):
username = forms.CharField(
label = 'Nom de compte'
)
password = forms.CharField(
label = "Mot de passe",
strip = False,
widget = forms.PasswordInput(),
)
class Meta:
model = User
fields = ['username','password']
Затем я использовал свою собственную форму в views.py:
from django.shortcuts import render, redirect
from .forms import FormulaireInscription, FormulaireConnexion
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
def connexion(request):
if request.method == "POST":
c_form = FormulaireConnexion(request, data=request.POST)
if c_form.is_valid():
username = c_form.cleaned_data('username')
password = c_form.cleaned_data('password')
user = authenticate(username, password)
if user is not None:
login(request, user)
return redirect('/home')
else:
messages.error(request, 'Nom de compte ou mot de passe invalide !')
else:
messages.error(request, 'Nom de compte ou mot de passe invalide !')
c_form = FormulaireConnexion
return render(request,'authentification/connexion.html', {'form':c_form})
И, наконец, я рендерил форму в моем файле html:
{% extends "home/index.html" %}
{% block title %}
Se connecter
{% endblock %}
{% block content %}
<form method="post" class='formulaire'>
{% csrf_token %}
{% for field in c_form %}
<p>
{{ field.label_tag }}<br>
{{ field }}
</p>
{% endfor %}
{% for message in messages %}
<p class="messages">{{message}}</p>
{% endfor %}
<button type="submit">Se connecter</button>
</form>
{% endblock %}
Но когда я go захожу на мой сайт, единственное, что появляется, это моя кнопка "вход" (Se connecter).