Heim Backend-Entwicklung Python-Tutorial Schritt-für-Schritt-Anleitung zur Benutzerauthentifizierung mit Django, Djoser und JWT: Teil I

Schritt-für-Schritt-Anleitung zur Benutzerauthentifizierung mit Django, Djoser und JWT: Teil I

Dec 27, 2024 pm 12:24 PM

Benutzerauthentifizierung und -verwaltung sind grundlegende Funktionen beim Starten eines neuen Projekts. Da sich diese Aufgaben häufig wiederholen, wurden verschiedene Pakete entwickelt, um den Prozess zu optimieren und es Entwicklern zu ermöglichen, sich auf andere Aspekte ihrer Projekte zu konzentrieren. Ein solches Paket ist Djoser, das sich nahtlos in das Django REST Framework (DRF) integrieren lässt, um die Authentifizierung und Benutzerverwaltung zu übernehmen. In diesem Leitfaden werde ich Sie durch den Aufbau eines vollständigen Benutzerauthentifizierungssystems mit Djoser führen, einschließlich der Einrichtung von E-Mail-Funktionen und benutzerdefinierten E-Mail-Vorlagen.

Einrichten des Projekts

Erstellen Sie zunächst ein Verzeichnis für Ihr Projekt:

mkdir userauth
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Navigieren Sie zum neuen Verzeichnis in Ihrer bevorzugten IDE, richten Sie eine virtuelle Umgebung ein und aktivieren Sie sie

python venv .venv
source .venv/bin/activate
Nach dem Login kopieren
Nach dem Login kopieren

Als nächstes installieren Sie die erforderlichen Pakete:

pip install django djangorestframework djoser djangorestframework_simplejwt social-auth-app-django drf-yasg

Nach dem Login kopieren
Nach dem Login kopieren

Hinweis: Einige Abhängigkeiten, wie z. B. social-auth-app-django, werden möglicherweise automatisch mit Djoser installiert. Wenn ja, können Sie das explizite Hinzufügen überspringen

Generieren Sie nach der Installation eine Datei „requirements.txt“, um Ihre Abhängigkeiten zu verfolgen:

pip freeze > requirements.txt
Nach dem Login kopieren
Nach dem Login kopieren

Sie sollten alle installierten Pakete in der Datei „requirements.txt“ aufgelistet sehen, einschließlich etwaiger Abhängigkeiten.

Erstellen Sie das Django-Projekt und bringen Sie den Server zum Laufen

django-admin startapp userauth . 
Nach dem Login kopieren
Nach dem Login kopieren

Dadurch wird das Django-Projekt erstellt. Anschließend müssen wir innerhalb unseres Projekts eine App erstellen

python manage.py startapp accounts
Nach dem Login kopieren
Nach dem Login kopieren

Ihr Projektverzeichnis sollte nun Folgendes enthalten:

  • .venv (virtuelle Umgebung)

  • Konten/ (Authentifizierungs-App)

  • userauth/ (Hauptprojektordner)

  • manage.py

  • requirements.txt

Konfigurieren des Projekts

Fügen Sie die erforderlichen Pakete und Apps zum Abschnitt INSTALLED_APPS in Settings.py hinzu:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

     # Third Party Apps
    'rest_framework',
    'djoser',
    'rest_framework_simplejwt',
    'drf_yasg',

    # Local Apps
    'accounts',
]
Nach dem Login kopieren
Nach dem Login kopieren

Aktualisieren Sie Ihre Settings.py, um Konfigurationen für Django REST Framework und SimpleJWT einzuschließen:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}
Nach dem Login kopieren
Nach dem Login kopieren

Lassen Sie uns unser benutzerdefiniertes Benutzermodell erstellen
Erstellen Sie die Datei manager.py im Kontenordner
Accounts/managers.py

from django.contrib.auth.models import BaseUserManager


class CustomUserManager(BaseUserManager):

    def create_user(self, email, username, password=None, **extra_fields) -> None:

        if not username:
            raise ValueError("Username is required")

        if not email:
            raise ValueError("Email is required")


        email = self.normalize_email(email)
        user = self.model(email=email, username=username, **extra_fields)
        user.set_password(password)
        user.save()
        return user


    def create_superuser(self, email, username, password, **extra_fields):
        """
        Create and save a SuperUser with the given email and password.
        """
        extra_fields.setdefault("is_staff", True)
        extra_fields.setdefault("is_superuser", True)
        extra_fields.setdefault("is_active", True)

        if extra_fields.get("is_staff") is not True:
            raise ValueError("Superuser must have is_staff=True.")

        if extra_fields.get("is_superuser") is not True:
            raise ValueError("Superuser must have is_superuser=True.")

        return self.create_user(email, username, password, **extra_fields)
Nach dem Login kopieren

accounts/models.py

from django.db import models
from django.contrib.auth.models import AbstractUser
from accounts.managers import CustomUserManager



class CustomUser(AbstractUser):
    username = None
    email = models.EmailField(unique=True)
    is_verified = models.BooleanField(default=False)


    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()


    def __str__(self):
        return self.email
Nach dem Login kopieren

Fügen Sie diese Zeile in Ihre Datei „settings.py“ ein

AUTH_USER_MODEL = 'accounts.CustomUser'
Nach dem Login kopieren

Wir können unsere Migrationen durchführen und dann den lokalen Entwicklungsserver ausführen

python manage.py makemigrations
python manage.py migrate
python manage.py runserver
Nach dem Login kopieren

Bis jetzt sollte es keine Probleme geben.

Konfigurieren von Djoser-URLs

Fügen Sie die von Djoser bereitgestellten URLs zusammen mit Swagger für die API-Dokumentation in die URL-Muster Ihres Projekts ein:

userauth/urls.py

from django.contrib import admin
from django.urls import include, path
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi


schema_view = get_schema_view(
    openapi.Info(
        title="User Accounts API",
        default_version="v1",
        description="REST implementation of Django authentication system using Djoser",
        contact=openapi.Contact(email="contact@snippets.local"),
        license=openapi.License(name="BSD License"),
    ),
    public=True,
    permission_classes=(permissions.AllowAny,),
)

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/docs', schema_view.with_ui("swagger", cache_timeout=0), name="swagger-ui"),
    path('api/', include('djoser.urls')), 
    path('api/', include('djoser.urls.jwt'))
]

Nach dem Login kopieren

Gehen Sie in Ihrem Browser zu http://127.0.0.1:8000/api/docs/, um die API-Dokumentation anzuzeigen.

Konfigurieren der Djoser-Einstellungen

Alle Einstellungen, die für Djoser konfiguriert werden können, finden Sie hier Djoser-Einstellungen

userauth/settings.py

mkdir userauth
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hier verlangen wir, dass Benutzer eine Aktivierungs-E-Mail erhalten. Die Aktivierungs-URL ist der Link, der an die E-Mail-Adresse des Benutzers gesendet wird, damit dieser darauf klicken kann. Das Token und die UID müssen extrahiert und eine Post-Anfrage als Text an die Aktivierungsroute in Ihrem Projekt gesendet werden

E-Mail-Versand konfigurieren

Zuletzt müssen wir den E-Mail-Versand konfigurieren. Ich werde Mailtrap zum E-Mail-Versand verwenden. Sie können wählen, ob Sie die E-Mail an die Konsole oder an einen anderen E-Mail-Dienst Ihrer Wahl senden möchten.

Zum Senden der E-Mail an Ihre Konsole

python venv .venv
source .venv/bin/activate
Nach dem Login kopieren
Nach dem Login kopieren

Verwendung eines externen Postdienstes

pip install django djangorestframework djoser djangorestframework_simplejwt social-auth-app-django drf-yasg

Nach dem Login kopieren
Nach dem Login kopieren

Ersetzen Sie die Platzhalter durch die richtigen Anmeldeinformationen

Um dies zu testen, verwenden wir Postman, um es auszuprobieren.

Neuen Benutzer erstellen

Step-by-Step Guide to User Authentication with Django, Djoser, and JWT: Part I

Dann wird die Aktivierungs-E-Mail an den Benutzer gesendet

Step-by-Step Guide to User Authentication with Django, Djoser, and JWT: Part I

Anpassen von E-Mail-Vorlagen

Lassen Sie uns die E-Mail-Vorlage ein wenig anpassen
Erstellen Sie einen Vorlagenordner im Kontenverzeichnis, erstellen Sie dann einen E-Mail-Ordner und erstellen Sie dort einen Vorlagenordner

accounts/templates/email/activation_email.py
Wir passen die Standard-E-Mail an, die mit djoser geliefert wird

pip freeze > requirements.txt
Nach dem Login kopieren
Nach dem Login kopieren

Um den Site-Namen in der Vorlage anzupassen, fügen Sie diese Zeile zur Djoser-Einstellung hinzu

django-admin startapp userauth . 
Nach dem Login kopieren
Nach dem Login kopieren

Die E-Mail-Vorlage sieht jetzt so aus

Step-by-Step Guide to User Authentication with Django, Djoser, and JWT: Part I

Aktivierungsansicht erweitern

Lassen Sie uns im letzten Teil dieses Artikels an der E-Mail-Verifizierung arbeiten.
Wir beginnen mit der Anpassung der Aktivierungsansicht in Accounts/views.py:

accounts/views.py

python manage.py startapp accounts
Nach dem Login kopieren
Nach dem Login kopieren

Wir erweitern die Aktivierungsansicht auf Djoser, um sie anzupassen und setzen das Feld is_verified in unserem Benutzermodell auf true

accounts/urls.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

     # Third Party Apps
    'rest_framework',
    'djoser',
    'rest_framework_simplejwt',
    'drf_yasg',

    # Local Apps
    'accounts',
]
Nach dem Login kopieren
Nach dem Login kopieren

URLs-Datei auf Projektebene
userauth/urls.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}
Nach dem Login kopieren
Nach dem Login kopieren

Um dies zu testen, erstellen Sie einen neuen Testbenutzer und klicken Sie auf die Aktivierungs-URL, die an die E-Mail gesendet wurde.
Sie gelangen auf diese Seite, da die URL in unserem Projekt nicht existiert

Step-by-Step Guide to User Authentication with Django, Djoser, and JWT: Part I

Extrahieren Sie aus der URL die UID und das Token und stellen Sie eine Post-Anfrage an die Aktivierungsroute, die Sie in Ihrer Datei „accounts/urls.py“ definiert haben

aus dem Screenshot geht hervor, dass meine Route ;
ist

mkdir userauth
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die UID ist MTY
Der Token ist cil456-aaf8331efb885f0b4412f35ce544648c

Verwenden der Parameter, um eine Post-Anfrage an den Aktivierungsendpunkt zu stellen

Step-by-Step Guide to User Authentication with Django, Djoser, and JWT: Part I

Damit ist das Tutorial zum Einrichten der Benutzerauthentifizierung mit Djoser abgeschlossen. Sie verfügen jetzt über ein funktionierendes Authentifizierungssystem mit E-Mail-Aktivierung und anpassbaren Vorlagen. Im zweiten Teil dieser Serie befassen wir uns mit der sozialen Authentifizierung, die es Benutzern ermöglicht, sich über Drittanbieterdienste wie Google, Facebook und GitHub anzumelden und anzumelden. Bleiben Sie dran für mehr!

Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.

Das obige ist der detaillierte Inhalt vonSchritt-für-Schritt-Anleitung zur Benutzerauthentifizierung mit Django, Djoser und JWT: Teil I. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Wie löste ich das Problem der Berechtigungen beim Betrachten der Python -Version in Linux Terminal? Apr 01, 2025 pm 05:09 PM

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Wie kann man vom Browser vermeiden, wenn man überall Fiddler für das Lesen des Menschen in der Mitte verwendet? Apr 02, 2025 am 07:15 AM

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Wie kann ich die gesamte Spalte eines Datenrahmens effizient in einen anderen Datenrahmen mit verschiedenen Strukturen in Python kopieren? Apr 01, 2025 pm 11:15 PM

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen ohne Serving_forver () an? Apr 01, 2025 pm 10:51 PM

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Wie löste ich Berechtigungsprobleme bei der Verwendung von Python -Verssionsbefehl im Linux Terminal? Apr 02, 2025 am 06:36 AM

Verwenden Sie Python im Linux -Terminal ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer-Anfänger-Programmierbasis in Projekt- und problemorientierten Methoden? Apr 02, 2025 am 07:18 AM

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Wie bekomme ich Nachrichtendaten, die den Anti-Crawler-Mechanismus von Investing.com umgehen? Wie bekomme ich Nachrichtendaten, die den Anti-Crawler-Mechanismus von Investing.com umgehen? Apr 02, 2025 am 07:03 AM

Verständnis der Anti-Crawling-Strategie von Investing.com Viele Menschen versuchen oft, Nachrichten von Investing.com (https://cn.investing.com/news/latest-news) zu kriechen ...

See all articles