[PYTHON] [Django] Ich möchte mich nach einer neuen Registrierung automatisch anmelden

Einführung

Neue Registrierung und Anmeldung sind die Grundfunktionen beim Erstellen einer Website. Nachdem ich die neue Registrierung abgeschlossen hatte, wollte ich die Eingabe der erforderlichen Elemente auf dem Anmeldebildschirm unterlassen und untersuchte die Methode.

Annahme

Die Projektstruktur ist wie folgt. Das Einstellungsverzeichnis ist config und das Anwendungsverzeichnis wird in App und Konten erstellt.

.
├── 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

Das Einstellungsverzeichnis, die darin angegebene URLconf in django.contrib.auth und die URlconf des Anwendungsverzeichnisses werden unten angezeigt.

Konfigurationsdatei URLconf

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')),  #Urls von Django im Voraus zur Verfügung gestellt.Zu py
    path('accounts/', include('accounts.urls')),  #Urls, die ich erstellt habe.Zu 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'),
]

Anwendungs-URLconf

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

Hauptthema

Neue Registrierung abgeschlossen → Auf dem Anmeldebildschirm eingeben → Anmeldung abgeschlossen

Überprüfen Sie vor der Montage zunächst den Status.

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

Neue Registrierung abgeschlossen → Login abgeschlossen

Nach Abschluss der neuen Registrierung müssen Sie nur geringfügige Änderungen an acccouts / views.py vornehmen, um die Anmeldung abzuschließen, ohne den Anmeldebildschirm zu durchlaufen.

accounts/views.py


from django.urls import reverse_lazy
from django.views import generic
from django.contrib.auth import login, authenticate    #hinzufügen

from .forms import UserCreateForm


class SignUpView(generic.CreateView):
    form_class = UserCreateForm
    success_url = reverse_lazy('app:index')   #Veränderung
    template_name = 'registration/signup.html'

    #Unten hinzugefügt
    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

Es gibt zwei Aufgaben: Angabe von "success_url" und Überschreiben der form_valid-Methode.

Recommended Posts

[Django] Ich möchte mich nach einer neuen Registrierung automatisch anmelden
Ich möchte Datetime.now in Djangos Test reparieren
Ich kann mich mit Django 3 nicht auf der Admin-Seite anmelden
Ich habe versucht, mich automatisch mit Selen bei Twitter anzumelden (RPA, Scraping)
Ich möchte in der Einschlussnotation drucken
Ich möchte Matplotlib in PySimpleGUI einbetten
Ich möchte die Django Debug Toolbar in Ajax-Anwendungen verwenden
Ich möchte Dunnetts Test in Python machen
Ich möchte mit Python ein Fenster erstellen
Ich möchte die Eingabe / Ausgabe von Dateien unter Linux protokollieren
Ich möchte den Fortschritt in Python anzeigen!
Ich möchte eine Django-App auf Heroku hochladen
[Django-Memo] Ich möchte die angemeldeten Benutzerinformationen im Voraus im Formular festlegen.
Ich möchte in Python schreiben! (1) Überprüfung des Codeformats
Ich möchte Timeout einfach in Python implementieren
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte mich mit Backpropagation (tf.custom_gradient) (Tensorflow) selbst verwenden.
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Auch mit JavaScript möchte ich Python `range ()` sehen!
Ich möchte eine Datei mit Python zufällig testen
TemplateView-Muster, die Sie zuerst in Django lernen möchten
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte automatisch eine Unternehmensgründungs-E-Mail senden
Ich möchte R-Datensatz mit Python verwenden
Ich möchte am Ende etwas mit Python machen
Ich möchte Strings in Kotlin wie Python manipulieren!
Ich möchte Wake On LAN vollautomatisch ausführen
Ich möchte eine Fehlermeldung auf Japanisch mit dem Django-Passwortänderungsformular ausgeben
Ich möchte eine Spalte mit NA in R einfach löschen
Ich möchte so etwas wie Uniq in Python sortieren
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
Ich möchte automatisch einen modernen Metal-Bandnamen generieren
So melden Sie sich automatisch wie 1Password von der CLI an
Ich möchte SUDOKU lösen
Ich möchte automatisch an Online-Kursen mit Python + Selen teilnehmen!
Ich möchte den Wörterbuchtyp in der Liste eindeutig machen
[Einführung in Pytorch] Ich möchte Sätze in Nachrichtenartikeln generieren
Ich möchte eindeutige Werte in einem Array oder Tupel zählen
Ich möchte die gültigen Zahlen im Numpy-Array ausrichten
Ich möchte Python mit VS-Code ausführen können
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Ich wollte den AWS-Schlüssel nicht in das Programm schreiben
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
Ich möchte automatisch hochwertige Teile aus den von mir aufgenommenen Videos finden
Erfassen Sie das Betriebsprotokoll automatisch im Terminal, wenn Sie sich bei Linux anmelden
[Linux] Ich möchte das Datum wissen, an dem sich der Benutzer angemeldet hat
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
MacBookPro-Setup Schließlich möchte ich eine Neuinstallation durchführen
Ich möchte Rails mit Rails auch in einer vagabundierenden Umgebung betreiben
LINEbot-Entwicklung möchte ich den Betrieb in der lokalen Umgebung überprüfen
[Python / AWS Lambda-Ebenen] Ich möchte nur Module in AWS Lambda-Ebenen wiederverwenden
Ich möchte Google Form jeden Morgen um 5 Uhr automatisch beantworten
Versuchen Sie, sich mit Python auf Ihrem PC automatisch bei Netflix anzumelden
Ich möchte eine Pipfile erstellen und im Docker wiedergeben
Ich möchte die zweite Zeile zum Spaltennamen in Pandas machen
Ich möchte den G-Test in einem Monat Tag 1 bestehen
Ich möchte die Bevölkerung jedes Landes der Welt kennenlernen.
Fehler im Zusammenhang mit Memcached in Django
Ich möchte systemd grob verstehen