使用 Djoser 实现用户认证

Djoser 是一个为 Django REST Framework 提供用户认证的库,它提供了开箱即用的 API 端点,用于用户注册、登录、注销、密码重置等功能。以下是如何在 Django 项目中使用 Djoser 的步骤:

1. 安装 Djoser

首先,确保你已经安装了 Django 和 Django REST Framework。然后,通过 pip 安装 Djoser:

pip install djoser djangorestframework

2. 更新 settings.py

在你的 Django 项目的 settings.py 文件中,添加 djoser 和 rest_framework 到 INSTALLED_APPS 中:

INSTALLED_APPS = [
    ...
    'rest_framework',
    'djoser',
    ...
]

3. 配置 Django REST Framework

你可能需要在 settings.py 中配置 Django REST Framework,以确保它使用合适的身份验证类。例如:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
    ),
}

4. 配置 Djoser (可选)

Djoser 提供了许多默认配置,你可以在 settings.py 中根据需要进行自定义。例如,设置用户模型和认证相关的配置:

DJOSER = {
    'USER_CREATE_PASSWORD_RETYPE': True,
    'SERIALIZERS': {
        'user_create': 'yourapp.serializers.UserCreateSerializer',  # 自定义用户创建序列化器
        'user': 'yourapp.serializers.UserSerializer',               # 自定义用户序列化器
    },
}

5. 设置 URL 路由

在你的 urls.py 中包含 Djoser 的路由。你可以这样添加:

from django.urls import path, include

urlpatterns = [
    path('api/auth/', include('djoser.urls')),
    path('api/auth/', include('djoser.urls.authtoken')),  # 如果使用 Token 认证
]

6. 使用 Djoser 的 API 端点

现在你可以使用以下端点进行用户操作:

  • 注册:POST /api/auth/users/
  • 登录:POST /api/auth/token/login/
  • 注销:POST /api/auth/token/logout/
  • 密码重置:POST /api/auth/users/reset_password/
  • 获取用户信息:GET /api/auth/users/me/

7. 自定义序列化器(可选)

如果你需要自定义用户模型或添加额外的字段,可以创建自己的序列化器:

from djoser.serializers import UserCreateSerializer, UserSerializer
from .models import CustomUser  # 引用自定义用户模型

class CustomUserCreateSerializer(UserCreateSerializer):
    class Meta(UserCreateSerializer.Meta):
        model = CustomUser
        fields = ('id', 'username', 'email', 'password')  # 自定义字段

class CustomUserSerializer(UserSerializer):
    class Meta(UserSerializer.Meta):
        model = CustomUser
        fields = ('id', 'username', 'email')  # 自定义字段

确保在 Djoser 配置中引用自定义序列化器。

在postman 测试djsoer

posted @ 2024-10-31 16:48  林汉州win  阅读(9)  评论(0编辑  收藏  举报