[PYTHON] [Django] Je souhaite me connecter automatiquement après une nouvelle inscription

introduction

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.

supposition

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.

URLconf du fichier de configuration

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'),
]

URL de l'applicationconf

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'),
]

Sujet principal

Nouvelle inscription terminée → Entrez sur l'écran de connexion → Connexion terminée

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')

Nouvelle inscription terminée → Connexion terminée

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.

Recommended Posts

[Django] Je souhaite me connecter automatiquement après une nouvelle inscription
Je veux corriger Datetime.now dans le test de Django
Je n'arrive pas à me connecter à la page d'administration avec Django 3
J'ai essayé de me connecter automatiquement à Twitter avec du sélénium (RPA, scraping)
Je veux imprimer dans la notation d'inclusion
Je veux intégrer Matplotlib dans PySimpleGUI
Je souhaite utiliser Django Debug Toolbar dans les applications Ajax
Je veux faire le test de Dunnett en Python
Je veux créer une fenêtre avec Python
Je veux enregistrer les entrées / sorties de fichiers sous Linux
Je veux afficher la progression en Python!
Je souhaite télécharger une application Django sur heroku
[Django memo] Je souhaite définir à l'avance les informations de l'utilisateur connecté dans le formulaire.
Je veux écrire en Python! (1) Vérification du format de code
Je veux facilement implémenter le délai d'expiration en python
Je veux faire la transition avec un bouton sur le ballon
Je veux utiliser self avec Backpropagation (tf.custom_gradient) (tensorflow)
Je veux écrire en Python! (2) Écrivons un test
Même avec JavaScript, je veux voir Python `range ()`!
Je veux échantillonner au hasard un fichier avec Python
TemplateView les modèles que vous souhaitez apprendre en premier dans Django
Je veux travailler avec un robot en python.
Je souhaite envoyer automatiquement un e-mail de création d'entreprise
Je veux utiliser le jeu de données R avec python
Je veux faire quelque chose avec Python à la fin
Je veux manipuler des chaînes dans Kotlin comme Python!
Je veux faire Wake On LAN de manière entièrement automatique
Je souhaite envoyer un message d'erreur en japonais avec le formulaire de changement de mot de passe django
Je souhaite supprimer facilement une colonne contenant NA dans R
Je veux faire quelque chose comme sort uniq en Python
Je veux créer un éditeur de blog avec l'administrateur de django
Je veux générer automatiquement un nom de groupe de metal moderne
Comment se connecter automatiquement comme 1Password depuis CLI
Je veux résoudre SUDOKU
Je veux assister automatiquement à des cours en ligne avec Python + Selenium!
Je veux rendre le type de dictionnaire dans la liste unique
[Introduction à Pytorch] Je souhaite générer des phrases dans des articles de presse
Je veux compter des valeurs uniques dans un tableau ou un tuple
Je veux aligner les nombres valides dans le tableau Numpy
Je veux pouvoir exécuter Python avec VS Code
Je veux ajouter un joli complément à input () en python
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Je ne voulais pas écrire la clé AWS dans le programme
Je souhaite enregistrer l'heure d'exécution et conserver un journal.
Je veux trouver automatiquement des pièces de haute qualité à partir des vidéos que j'ai tournées
Acquérir automatiquement le journal des opérations dans le terminal lors de la connexion à Linux
[Linux] Je souhaite connaître la date à laquelle l'utilisateur s'est connecté
Je veux résoudre APG4b avec Python (seulement 4.01 et 4.04 au chapitre 4)
Configuration MacBookPro Après tout, je veux faire une installation propre
Je veux utiliser des rails avec des rails même dans un environnement vagabond
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
[Couches Python / AWS Lambda] Je souhaite réutiliser uniquement le module dans AWS Lambda Layers
Je souhaite répondre automatiquement au formulaire Google à 17 heures tous les matins
Essayez de vous connecter automatiquement à Netflix en utilisant python sur votre PC
Je veux créer un fichier pip et le refléter dans le menu fixe
Je veux faire de la deuxième ligne le nom de la colonne dans pandas
Je veux réussir le test G dans un mois Jour 1
Je veux connaître la population de chaque pays du monde.
Erreur liée à memcached dans django
Je veux comprendre à peu près systemd