使用 Django、Djoser 和 JWT 进行用户身份验证的分步指南:第一部分
用户身份验证和管理是启动新项目时的基本功能。由于这些任务经常重复,因此开发了各种软件包来简化流程,使开发人员能够专注于项目的其他方面。 Djoser 就是这样的一个包,它与 Django REST Framework (DRF) 无缝集成来处理身份验证和用户管理。在本指南中,我将引导您使用 Djoser 构建完整的用户身份验证系统,包括设置电子邮件功能和自定义电子邮件模板。
设置项目
首先为您的项目创建一个目录:
mkdir userauth
导航到您首选 IDE 中的新目录,设置虚拟环境并激活它
python venv .venv source .venv/bin/activate
接下来,安装必要的软件包:
pip install django djangorestframework djoser djangorestframework_simplejwt social-auth-app-django drf-yasg
注意:一些依赖项,例如social-auth-app-django,可能会随Djoser 自动安装。如果是这样,您可以跳过显式添加它们
安装后,生成一个requirements.txt 文件来跟踪您的依赖项:
pip freeze > requirements.txt
您应该会看到requirements.txt 文件中列出的所有已安装的软件包,包括所有依赖项。
创建 Django 项目并让服务器运行
django-admin startapp userauth .
这将创建 django 项目。然后我们需要在项目中创建一个应用程序
python manage.py startapp accounts
您的项目目录现在应包含以下内容:
.venv(虚拟环境)
帐户/(身份验证应用程序)
userauth/(主项目文件夹)
manage.py
需求.txt
配置项目
将所需的软件包和应用程序添加到settings.py中的INSTALLED_APPS部分:
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', ]
更新您的 settings.py 以包含 Django REST Framework 和 SimpleJWT 的配置:
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), }
让我们创建自定义用户模型
在accounts文件夹中创建managers.py文件
账户/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)
账户/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
将此行添加到您的settings.py 文件中
AUTH_USER_MODEL = 'accounts.CustomUser'
我们可以继续进行迁移,然后运行本地开发服务器
python manage.py makemigrations python manage.py migrate python manage.py runserver
到目前为止应该没有问题。
配置 Djoser URL
在项目的 URL 模式中包含 Djoser 提供的 URL,以及 API 文档的 Swagger:
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')) ]
通过浏览器访问http://127.0.0.1:8000/api/docs/查看API文档。
配置 Djoser 设置
可以为 djoser 配置的所有设置都可以在此处找到 Djoser 设置
userauth/settings.py
mkdir userauth
这里我们要求用户接收激活电子邮件。激活 URL 是发送到用户电子邮件以供用户点击的链接。需要提取令牌和 uid,并将发布请求作为正文发送到项目中的激活路由
配置电子邮件发送
最后我们需要配置电子邮件发送。我将使用 mailtrap 发送电子邮件。您可以选择将电子邮件发送到控制台或您选择的任何电子邮件服务。
用于将电子邮件发送到您的控制台
python venv .venv source .venv/bin/activate
使用外部邮件服务
pip install django djangorestframework djoser djangorestframework_simplejwt social-auth-app-django drf-yasg
用正确的凭据替换占位符
为了测试这一点,我们将使用邮递员来测试它。
创建新用户
然后发送给用户的激活邮件
自定义电子邮件模板
让我们稍微自定义一下电子邮件模板
在accounts目录中创建一个模板文件夹,然后创建一个电子邮件文件夹并继续在其中创建模板文件夹
帐户/模板/电子邮件/activation_email.py
我们自定义了djoser自带的默认邮箱
pip freeze > requirements.txt
要在模板中自定义站点名称,请将此行添加到 djoser 设置
django-admin startapp userauth .
电子邮件模板现在看起来像这样
扩展激活视图
在本文的最后一部分,我们将进行电子邮件验证。
我们首先在accounts/views.py中自定义激活视图:
帐户/views.py
python manage.py startapp accounts
我们正在扩展 djoser 上的激活视图以对其进行自定义,并将用户模型上的 is_verified 字段设置为 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', ]
项目级别的 URL 文件
userauth/urls.py
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), }
要测试此功能,请创建一个新的测试用户,然后单击发送到电子邮件的激活网址。
您到达此页面是因为该网址在我们的项目中不存在
从 url 中提取 uid 和 token,并向您在accounts/urls.py 文件中定义的激活路由发出发布请求
从截图来看,我的路线是;
mkdir userauth
uid 是 MTY
代币为 cil456-aaf8331efb885f0b4412f35ce544648c
使用参数向激活端点发出 POST 请求
使用 Djoser 设置用户身份验证的教程到此结束。您现在拥有一个具有电子邮件激活和可自定义模板的功能身份验证系统。在本系列的第二部分中,我们将探讨社交身份验证,使用户能够使用 Google、Facebook 和 GitHub 等第三方服务进行注册和登录。更多精彩敬请期待!
如果您有任何问题或反馈,请随时发表评论。
以上是使用 Django、Djoser 和 JWT 进行用户身份验证的分步指南:第一部分的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。
