Hallo! Dies ist Ponta, ein Shiba-Hund. Es ist heute heiß, also habe ich den Soda-Geschmack gegessen. Es war wahnsinnig lecker! Garigari-Kun wird von einer Firma in der Präfektur Saitama hergestellt. Ponta war noch nie in der Präfektur Saitama.
Nun, heute werde ich die Benutzerverwaltungsfunktion herausfordern.
Erstellen Sie zunächst eine Kontoanwendung.
terminal
(venv_dog) Ponta@shiba_app # python manage.py startapp accounts
Registrieren Sie die Anwendung nach dem Erstellen in INSTALLED_APPS unter shiba_app / settings.py. Pontas INSTALLED_APPS sieht folgendermaßen aus:
shiba_app/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'top.apps.TopConfig',
'wan.apps.WanConfig',
'accounts.apps.AccountsConfig',
]
Letzte 'accounts.apps.AccountsConfig', Hinzugefügt.
In settings.py sind einige Einstellungen für die Benutzerregistrierungs- / Authentifizierungsfunktion erforderlich. Senden und empfangen Sie zunächst E-Mails zur Überprüfung der E-Mail-Adresse, die auf der Konsole in der Entwicklungsumgebung angezeigt wird. Die Einstellung hierfür ist EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' ist.
Lassen Sie Django als Nächstes auf das benutzerdefinierte Benutzermodell verweisen. AUTH_USER_MODEL = 'accounts.CustomUser' Einstellen.
Zusätzlich wird für Django-Allauth, das unten beschrieben wird, SITE_ID = 1 Einstellen.
Auch die Einstellungen für das Authentifizierungs-Backend AUTHENTICATION_BACKENDS = ( 'allauth.account.auth_backends.AuthenticationBackend', 'django.contrib.auth.backends.ModelBackend', ) ist. allauth.account.auth_backends.AuthenticationBackend Ist ein Authentifizierungs-Backend für allgemeine Benutzer, um sich mit E-Mail-Adressauthentifizierung anzumelden. django.contrib.auth.backends.ModelBackend Ist ein Authentifizierungs-Backend, mit dem sich Superuser mit ihrem Benutzernamen bei der Admin-Site anmelden können.
ACCOUNT_AUTHENTICATION_METHOD = 'email' Stellen Sie die E-Mail-Adressüberprüfung ein. ACCOUNT_USERNAME_REQUIRED = True Der Benutzername wird in benötigt.
ACCOUNT_EMAIL_VERIFICATION = 'mandatory' ACCOUNT_EMAIL_REQUIRED = True Es ist obligatorisch, Ihre E-Mail-Adresse zu bestätigen.
LOGIN_REDIRECT_URL = 'wan:index' Umleiten Sie nach dem Anmelden mit zum Index der WAN-Anwendung und ACCOUNT_LOGOUT_REDIRECT_URL = 'top:index' Umleiten Sie nach dem Abmelden mit zum Index der obersten Anwendung.
ACCOUNT_LOGOUT_ON_GET = True Ist eine Einstellung zum Abmelden unmittelbar nach dem Klicken auf die Schaltfläche Abmelden.
shiba_app/settings.py
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
AUTH_USER_MODEL = 'accounts.CustomUser'
SITE_ID = 1
AUTHENTICATION_BACKENDS = (
'allauth.account.auth_backends.AuthenticationBackend',
'django.contrib.auth.backends.ModelBackend',
)
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_USERNAME_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_EMAIL_REQUIRED = True
LOGIN_REDIRECT_URL = 'wan:index'
ACCOUNT_LOGOUT_REDIRECT_URL = 'top:index'
ACCOUNT_LOGOUT_ON_GET = True
Django definiert ein Standardbenutzermodell, aber Sie können es überschreiben, um ein benutzerdefiniertes Benutzermodell zu definieren.
account/models.py
rom django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
class Meta:
verbose_name_plural = 'CustomUser'
dogname = models.CharField(verbose_name='Dog Name', blank=False, max_length=40)
introduction = models.TextField(verbose_name='Introduction', blank=True)
Ich habe Dogname und Einführung hinzugefügt. Ich möchte diese Eingabebildschirme später erstellen, wenn ich eine Chance habe.
terminal
(venv_dog) Ponta@shiba_app # python manage.py makemigrations
Migrations for 'accounts':
accounts/migrations/0001_initial.py
- Create model CustomUser
Process finished with exit code 0
(venv_dog) Ponta@shiba_app # python manage.py migrate
Operations to perform:
Apply all migrations: accounts, admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0001_initial... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying accounts.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying sessions.0001_initial... OK
(venv_dog) Ponta@shiba_app #
Da es schwierig ist, eine Benutzerauthentifizierungsfunktion zu erstellen, verwenden wir ein Paket namens django-allauth.
terminal
(venv_dog) Ponta@shiba_app # pip install django-allauth
In INSTALLED_APPS in settings.py, um Django-allauth für Ihre Anwendung verfügbar zu machen 'django.contrib.sites', 'allauth', 'allauth.account', 'allauth.socialaccount', Fügen Sie 4 Zeilen hinzu.
shiba_app/settings.py
INSTALLED_APPS = [
(Unterlassung)
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
]
Führen Sie den Befehl migrate erneut aus, um die von django-allauth verwendete Tabelle zu erstellen.
terminal
(venv_dog) Ponta@shiba_app # python manage.py migrate
Operations to perform:
Apply all migrations: account, accounts, admin, auth, contenttypes, sessions, sites, socialaccount
Running migrations:
Applying account.0001_initial... OK
Applying account.0002_email_max_length... OK
Applying sites.0001_initial... OK
Applying sites.0002_alter_domain_unique... OK
Applying socialaccount.0001_initial... OK
Applying socialaccount.0002_token_max_lengths... OK
Applying socialaccount.0003_extra_data_default_dict... OK
Erstellen Sie einen Superuser, um auf den Django-Verwaltungsbildschirm zuzugreifen.
terminal
(venv_dog) Ponta@shiba_app # python manage.py createsuperuser
Username: ponta
Email address: [email protected]
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: N
Password:
Password (again):
Superuser created successfully.
Hoppla, die Passwortüberprüfung scheint hängen zu bleiben, wenn das Passwort zu kurz oder zu einfach ist. Das zweite Mal habe ich es ernst genommen.
Nachdem Sie einen Superuser erstellt haben, melden Sie sich beim Django-Verwaltungsbildschirm an. http://127.0.0.1:8000/admin/ Zugreifen. Dann http://127.0.0.1:8000/admin/login/?next=/admin/ Ich wurde zu weitergeleitet und der Anmeldebildschirm wurde angezeigt.
Geben Sie hier den Benutzernamen und das Passwort ein, mit denen Sie den Superuser zum Anmelden erstellt haben. Dann konnte ich mich wie unten gezeigt erfolgreich anmelden und der Verwaltungsbildschirm wurde angezeigt.
Derzeit wurden drei Anwendungen (Top, WAN, Konten) in shiba_app erstellt.
shiba_app/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('top.urls')),
path('wan/', include('wan.urls')),
path('accounts/', include('allauth.urls')),
]
top/urls.py
from django.urls import path
from . import views
app_name = 'top'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
]
wan/urls.py
from django.urls import path
from . import views
app_name = 'wan'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
]
top/views.py
from django.views import generic
class IndexView(generic.TemplateView):
template_name = "top/index.html"
wan/views.py
from django.views import generic
class IndexView(generic.TemplateView):
template_name = "wan/index.html"
Der Benutzername und die Abmeldeschaltfläche werden während der Anmeldung angezeigt, und die Benutzerregistrierungsschaltfläche und die Anmeldeschaltfläche werden während der Abmeldung angezeigt.
top/templates/top/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Shiba Inu Pontas "Was ist ein Hund?"</title>
</head>
<body>
<h1>Shiba Inu Pontas "Was ist ein Hund?"</h1>
<p>Dies ist Ponta, ein Shiba-Hund. Grüße Eins!</p>
{% if user.is_authenticated %}
<p>Nutzername:{{ user }}</p>
<p><a href="{% url 'account_logout' %}">Ausloggen</a> </p>
{% else %}
<p><a href="{% url 'account_signup' %}">Benutzer Registration</a></p>
<p><a href="{% url 'account_login' %}">Einloggen</a></p>
{% endif %}
</body>
</html>
Der Benutzername und die Abmeldeschaltfläche werden während der Anmeldung angezeigt, und die Benutzerregistrierungsschaltfläche und die Anmeldeschaltfläche werden während der Abmeldung angezeigt. (Eh! Wie vorher ??)
wan/templates/wan/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Shiba Inu Pontas "Was ist ein Hund?"</title>
</head>
<body>
<h1>Shiba Inu Pontas "Was ist ein Hund?"</h1>
{% if user.is_authenticated %}
<p>Nutzername:{{ user }}</p>
<p><a href="{% url 'account_logout' %}">Ausloggen</a> </p>
{% else %}
<p><a href="{% url 'account_signup' %}">Benutzer Registration</a></p>
<p><a href="{% url 'account_login' %}">Einloggen</a></p>
{% endif %}
</body>
</html>
Lassen Sie uns nun die obere Seite überprüfen.
Klicken Sie auf Benutzerregistrierung.
Registrieren Sie einen Benutzer zum Testen.
Eine E-Mail wurde gesendet. Da es sich jetzt um einen Test handelt, wird eine E-Mail-Nachricht an die Konsole (Terminalbildschirm) gesendet.
terminal
[30/Aug/2020 11:45:57] "GET /accounts/signup/ HTTP/1.1" 200 1330
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [example.com] Please Confirm Your E-mail Address
From: webmaster@localhost
To: [email protected]
Date: Sun, 30 Aug 2020 11:46:30 -0000
Message-ID: (Kürzung)
Hello from example.com!
You're receiving this e-mail because user Lisa has given yours as an e-mail address to connect their account.
To confirm this is correct, go to http://127.0.0.1:8000/accounts/confirm-email/NA:1kCLn4:g2Po76yr88dimfzO641FunQcGbYPexyYkTE4j0JLZ4Q/
Thank you from example.com!
example.com
-------------------------------------------------------------------------------
[30/Aug/2020 11:46:30] "POST /accounts/signup/ HTTP/1.1" 302 0
In der Mitte dieser Anzeige, "http://127.0.0.1:8000/accounts/confirm-email/NA:1kCLn4:g2Po76yr88dimfzO641FunQcGbYPexyYkTE4j0JLZ4Q/" Die E-Mail-Authentifizierung ist abgeschlossen, wenn Sie darauf zugreifen.
Melden wir uns an, nachdem die E-Mail-Überprüfung abgeschlossen ist.
Nach dem Anmelden wird der folgende Bildschirm angezeigt.
Wenn Sie sich abmelden, kehren Sie zum ersten Bildschirm zurück.
Das ist es. Wir sehen uns! einer!
Recommended Posts