Un nouvel enregistrement et une nouvelle connexion sont les fonctions de base lors de la création d'un site Web. Après avoir terminé la nouvelle inscription, je voulais omettre de saisir à nouveau les éléments nécessaires sur l'écran de connexion, j'ai donc étudié la méthode.
La structure du projet est la suivante. Le répertoire des paramètres est config et le répertoire des applications est créé dans l'application et les comptes.
.
├── accounts
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── migrations
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
├── app
│ ├── __init__.py
│ ├── apps.py
│ ├── forms.py
│ ├── migrations
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── static
│ └── css
│ └── style.css
└── templates
├── base.html
├── registration
│ ├── base.html
│ ├── logged_out.html
│ ├── login.html
│ └── signup.html
└── app
└── index.html
Le répertoire de configuration, l'URLconf dans django.contrib.auth qui y est spécifié et l'URlconf du répertoire d'application sont indiqués ci-dessous.
config/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('app.urls')),
path('accounts/', include('django.contrib.auth.urls')), #URL fournies par Django à l'avance.Pour py
path('accounts/', include('accounts.urls')), #Urls que j'ai créées.Pour py
]
django/contrib/auth/urls.py
from django.contrib.auth import views
from django.urls import path
urlpatterns = [
path('login/', views.LoginView.as_view(), name='login'),
path('logout/', views.LogoutView.as_view(), name='logout'),
path('password_change/', views.PasswordChangeView.as_view(), name='password_change'),
path('password_change/done/', views.PasswordChangeDoneView.as_view(), name='password_change_done'),
path('password_reset/', views.PasswordResetView.as_view(), name='password_reset'),
path('password_reset/done/', views.PasswordResetDoneView.as_view(), name='password_reset_done'),
path('reset/<uidb64>/<token>/', views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
path('reset/done/', views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]
app/urls.py
from django.urls import path
from . import views
app_name = 'app'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
]
accounts/urls.py
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = [
path('signup/', views.SignUpView.as_view(), name='signup'),
]
Vérifiez d'abord l'état avant le montage.
accounts/views.py
from django.urls import reverse_lazy
from django.views import generic
from .forms import UserCreateForm
class SignUpView(generic.CreateView):
form_class = UserCreateForm
template_name = 'registration/signup.html'
success_url = reverse_lazy('login')
form_class
.template_name = 'registration / signup.html'
.success_url = reverse_lazy ('login')
. Dans ce cas, il s'agit de «connexion», donc lorsque la nouvelle inscription est terminée, vous serez redirigé vers la page de connexion (registration / login.html) préparée à l'avance par Django.template_name = 'registration / signup.html'
. (* Le html de la page de connexion est préparé à l'avance, mais le nouvel écran d'inscription n'est pas préparé, vous devez donc le créer vous-même.)Une fois la nouvelle inscription terminée, il vous suffit d'apporter une petite modification à acccouts / views.py pour terminer la connexion sans passer par l'écran de connexion.
accounts/views.py
from django.urls import reverse_lazy
from django.views import generic
from django.contrib.auth import login, authenticate #ajouter à
from .forms import UserCreateForm
class SignUpView(generic.CreateView):
form_class = UserCreateForm
success_url = reverse_lazy('app:index') #Changement
template_name = 'registration/signup.html'
#Ajouté ci-dessous
def form_valid(self, form):
response = super().form_valid(form)
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=password)
login(self.request, user)
return response
Il y a deux tâches à faire: spécifier success_url
et remplacer la méthode form_valid.
success_url = reverse_lazy ('app: index')
pour changer l'écran qui transite une fois l'enregistrement terminé de 'login' à 'app: index', c'est-à-dire la page principale.response = super (). Form_valid (form)
.et remplacez la valeur entrée dans le champ de nom d'utilisateur nouvellement enregistré par nom d'utilisateur.
form.cleaned_data` indique les données qui ont passé la validation d'entrée.password = form.cleaned_data.get ('password1')
.pour authentifier un utilisateur et un mot de passe. ʻAuthenticate ()
prend le nom d'utilisateur et le mot de passe comme arguments et renvoie un objet Utilisateur si le mot de passe est valide pour le nom d'utilisateur. S'il n'est pas valide, None est renvoyé.login (self.request, user)
. login ()
prend un objet HttpRequest et un objet User comme arguments.Recommended Posts