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.
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.
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'),
]
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'),
]
Ü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')
form_class
an.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.
success_url = reverse_lazy ('app: index')
, um den Bildschirm zu ändern, der nach Abschluss der Registrierung von 'login'to'app: index', dh der obersten Seite, übergeht.response = super (). Form_valid (form)
ab.form.cleaned_data
gibt die Daten an, die die Eingabevalidierung bestanden haben.password = form.cleaned_data.get ('password1')
.authenticate ()
verwendet Benutzername und Passwort als Argumente und gibt ein Benutzerobjekt zurück, wenn das Passwort für den Benutzernamen gültig ist. Wenn es ungültig ist, wird None zurückgegeben.login ()
verwendet ein HttpRequest-Objekt und ein User-Objekt als Argumente.Recommended Posts