recherche
Maisondéveloppement back-endTutoriel PythonGuide étape par étape de l'authentification utilisateur avec Django, Djoser et JWT : partie I

L'authentification et la gestion des utilisateurs sont des fonctionnalités fondamentales lors du démarrage d'un nouveau projet. Ces tâches étant souvent répétées, divers packages ont été développés pour rationaliser le processus, permettant aux développeurs de se concentrer sur d'autres aspects de leurs projets. L'un de ces packages est Djoser, qui s'intègre parfaitement à Django REST Framework (DRF) pour gérer l'authentification et la gestion des utilisateurs. Dans ce guide, je vais vous guider dans la création d'un système d'authentification complet des utilisateurs à l'aide de Djoser, y compris la configuration de la fonctionnalité de messagerie et des modèles de courrier électronique personnalisés.

Mise en place du projet

Commencez par créer un répertoire pour votre projet :

mkdir userauth

Accédez au nouveau répertoire dans votre IDE préféré, configurez un environnement virtuel et activez-le

python venv .venv
source .venv/bin/activate

Ensuite, installez les packages nécessaires :

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

Remarque : Certaines dépendances, telles que social-auth-app-django, peuvent être installées automatiquement avec Djoser. Si tel est le cas, vous pouvez ignorer leur ajout explicite

Une fois installé, générez un fichier exigences.txt pour suivre vos dépendances :

pip freeze > requirements.txt

Vous devriez voir tous les packages installés répertoriés dans le fichier exigences.txt, y compris toutes les dépendances.

Créez le projet Django et faites fonctionner le serveur

django-admin startapp userauth . 

Cela créera le projet Django. Nous devons ensuite créer une application dans notre projet

python manage.py startapp accounts

Le répertoire de votre projet devrait maintenant contenir les éléments suivants :

  • .venv (environnement virtuel)

  • comptes/ (application d'authentification)

  • userauth/ (dossier principal du projet)

  • manage.py

  • requirements.txt

Configuration du projet

Ajoutez les packages et applications requis à la section INSTALLED_APPS dans settings.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',
]

Mettez à jour votre settings.py pour inclure les configurations pour Django REST Framework et SimpleJWT :

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}

Créons notre modèle utilisateur personnalisé depuis
créer le fichier managers.py dans le dossier des comptes
comptes/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)

comptes/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

Ajoutez cette ligne dans votre fichier settings.py

AUTH_USER_MODEL = 'accounts.CustomUser'

Nous pouvons procéder à nos migrations puis exécuter le serveur de développement local

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

Il ne devrait y avoir aucun problème jusqu'à présent.

Configuration des URL Djoser

Incluez les URL fournies par Djoser dans les modèles d'URL de votre projet, ainsi que la documentation Swagger pour l'API :

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

Allez sur http://127.0.0.1:8000/api/docs/ dans votre navigateur pour consulter la documentation de l'API.

Configuration des paramètres de Djoser

Tous les paramètres pouvant être configurés pour Djoser peuvent être trouvés ici Paramètres de Djoser

userauth/settings.py

mkdir userauth

Ici, nous demandons aux utilisateurs de recevoir un e-mail d'activation. L'URL d'activation est le lien envoyé à l'e-mail de l'utilisateur pour qu'il puisse cliquer. Le jeton et l'uid doivent être extraits et une demande de publication envoyée avec eux comme corps de la route d'activation dans votre projet

Configuration de l'envoi d'e-mails

Enfin, nous devons configurer l'envoi d'e-mails. J'utiliserai mailtrap pour l'envoi d'e-mails. Vous pouvez choisir d'envoyer l'e-mail à la console ou au service de messagerie de votre choix.

Pour envoyer l'e-mail à votre console

python venv .venv
source .venv/bin/activate

Utilisation d'un service de messagerie externe

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

Remplacez les espaces réservés par les informations d'identification correctes

Pour tester cela, nous utiliserons Postman pour le tester.

Créer un nouvel utilisateur

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

Puis l'email d'activation envoyé à l'utilisateur

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

Personnalisation des modèles d'e-mails

Personnalisons un peu le modèle d'e-mail
Créez un dossier de modèles dans le répertoire des comptes, puis créez un dossier de courrier électronique et continuez à y créer un dossier de modèles

comptes/templates/email/activation_email.py
Nous personnalisons l'e-mail par défaut fourni avec djoser

pip freeze > requirements.txt

Pour personnaliser le nom du site dans le modèle, ajoutez cette ligne au paramètre djoser

django-admin startapp userauth . 

Le modèle d'e-mail ressemble maintenant à ceci

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

Extension de la vue d'activation

Pour la dernière partie de cet article, travaillons sur la vérification des emails.
Nous commençons par personnaliser la vue d'activation dans comptes/views.py :

comptes/views.py

python manage.py startapp accounts

Nous étendons la vue d'activation sur djoser pour la personnaliser et définissons le champ is_verified sur notre modèle utilisateur sur true

comptes/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',
]

Fichier Urls au niveau du projet
userauth/urls.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}

Pour tester cela, créez un nouvel utilisateur test et cliquez sur l'URL d'activation envoyée à l'e-mail.
Vous arrivez sur cette page, car l'url n'existe pas dans notre projet

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

à partir de l'url, extrayez l'uid et le jeton et faites une demande de publication sur la route d'activation que vous avez définie dans votre fichier comptes/urls.py

d'après la capture d'écran, mon itinéraire est :

mkdir userauth

L'uid est MTY
Le jeton est cil456-aaf8331efb885f0b4412f35ce544648c

Utilisation des paramètres pour faire une demande de publication sur le point de terminaison d'activation

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

Ceci conclut le tutoriel de configuration de l'authentification des utilisateurs avec Djoser. Vous disposez désormais d'un système d'authentification fonctionnel avec activation par e-mail et modèles personnalisables. Dans la deuxième partie de cette série, nous explorerons l'authentification sociale, permettant aux utilisateurs de s'inscrire et de se connecter à l'aide de services tiers tels que Google, Facebook et GitHub. Restez à l'écoute pour en savoir plus !

Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Comment le choix entre les listes et les tableaux a-t-il un impact sur les performances globales d'une application Python traitant de grands ensembles de données?Comment le choix entre les listes et les tableaux a-t-il un impact sur les performances globales d'une application Python traitant de grands ensembles de données?May 03, 2025 am 12:11 AM

ForhandlingLargedatasetSInpython, UsenumpyArraysforbetterperformance.1) NumpyArraysAremeMory-EfficientAndFasterFornumericalOperations.2) EvitUnneceSsaryTypeConversions.3) Le effet de levier

Expliquez comment la mémoire est allouée aux listes par rapport aux tableaux dans Python.Expliquez comment la mémoire est allouée aux listes par rapport aux tableaux dans Python.May 03, 2025 am 12:10 AM

Inpython, listSusedynamicMemoryallocation withover-allocation, whileLumpyArraySallocateFixedMemory.1) listsallocatemoreMoryThreededEdededInitialement, redimensipwenessary.2) NumpyArraySallocateExactMemoryForElements, offrantwectable usinessflexibilité.

Comment spécifiez-vous le type d'éléments de données dans un tableau Python?Comment spécifiez-vous le type d'éléments de données dans un tableau Python?May 03, 2025 am 12:06 AM

Inpython, YouCanscthedatatatypeyfelemememedenernSspant.1) usenpynernrump.1) usenpynerp.dloatp.ploatm64, formateur préséconstrolatatype.

Qu'est-ce que Numpy et pourquoi est-il important pour l'informatique numérique dans Python?Qu'est-ce que Numpy et pourquoi est-il important pour l'informatique numérique dans Python?May 03, 2025 am 12:03 AM

NumpyissentialFornumericalComputingInpythondutOtsSpeed, MemoryEfficiency et ComprehenSiveMathematicalFunctions.1) It'sfastBecauseitPerformSoperations INC.2) NumpyArraySareMoremory-EfficientThanpythonlists.3)

Discutez du concept de «l'allocation de la mémoire contigu» et de son importance pour les tableaux.Discutez du concept de «l'allocation de la mémoire contigu» et de son importance pour les tableaux.May 03, 2025 am 12:01 AM

ContigusMymoryallocationiscrucialforAraySBauseitallowsforefficient andfastelementAccess.1) iTenablesConstanttimeAccess, o (1), duetoDirectAddressCalculation.2) itimproveScacheefficiendyAllowingMultipleElementFetchesperCacheline.3) itsimplieniesMemorymorymorymorymorymory

Comment coupez-vous une liste de python?Comment coupez-vous une liste de python?May 02, 2025 am 12:14 AM

SlitingyPapyThonListIsDoneUsingTheSyntaxList [Démarrage: arrêt: étape] .He'showitworks: 1) startisheindexofthefirStelementoinclude.2) stopisTheIndexoftheFirstelementsoexclude.3) StepistheincrementBetweenselans.it'susefulfactingPortationSoListShsandCanusegeg

Quelles sont les opérations communes qui peuvent être effectuées sur des tableaux Numpy?Quelles sont les opérations communes qui peuvent être effectuées sur des tableaux Numpy?May 02, 2025 am 12:09 AM

NumpyAllowsForvariousOperations ONARRAYS: 1) BasicarithmeticLikeaddition, Soustraction, Multiplication, anddivision; 2) AdvancedOperationSuchasmatrixMultiplication; 3) Element-Wiseoperations withoutExplicitloop

Comment les tableaux sont-ils utilisés dans l'analyse des données avec Python?Comment les tableaux sont-ils utilisés dans l'analyse des données avec Python?May 02, 2025 am 12:09 AM

ArraySinpython, en particulier ThroughNumpyandPandas, aressentialfordataanalysis, offingspeeedAfficiency.1) numpyarrayablefficienthandlingoflargedatasetsandComplexOperationsLikEMoVingAverages.2)

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

Version crackée d'EditPlus en chinois

Version crackée d'EditPlus en chinois

Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.