📜  如何在 django rest 框架中创建用户和用户配置文件 - Python (1)

📅  最后修改于: 2023-12-03 15:08:36.105000             🧑  作者: Mango

如何在 Django Rest 框架中创建用户和用户配置文件

在基于 Django 的 Web 应用程序中,处理用户的注册、登录、编辑和其他相关操作是很常见的任务。Django Rest Framework 提供了许多方便的功能来处理这些任务。本文将介绍如何在 Django Rest 框架中创建用户和用户配置文件。

1. 安装 Django Rest Framework

如果你还没有安装 Django Rest Framework,可以使用 pip 进行安装:

pip install djangorestframework
2. 创建用户模型

首先,我们需要在 models.py 文件中创建一个用户模型。该模型一般继承 Django 自带的 AbstractBaseUserPermissionsMixin 类,并添加一些自定义字段。

from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
from django.db import models
from django.utils.translation import ugettext_lazy as _
from .managers import CustomUserManager

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True, null=False, blank=False)
    first_name = models.CharField(max_length=50, null=False, blank=False)
    last_name = models.CharField(max_length=50, null=False, blank=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name', 'last_name']

    objects = CustomUserManager()

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

    def __str__(self):
        return self.email

上面的代码中,email 字段用于唯一标识一个用户,first_namelast_name 字段则用于保存用户的姓和名。CustomUserManager 是我们后面要创建的一个自定义的用户管理器。

3. 创建用户管理器

接下来,我们需要在 managers.py 文件中创建一个自定义的用户管理器。该管理器一般继承 Django 自带的 BaseUserManager

from django.contrib.auth.models import BaseUserManager

class CustomUserManager(BaseUserManager):
    def create_user(self, email, first_name, last_name, password=None):
        if not email:
            raise ValueError('Users must have an email address')

        user = self.model(
            email=self.normalize_email(email),
            first_name=first_name,
            last_name=last_name,
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, first_name, last_name, password):
        user = self.create_user(
            email,
            first_name=first_name,
            last_name=last_name,
            password=password,
        )
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)
        return user

上面的代码中,create_user 方法用于创建普通用户,create_superuser 方法用于创建超级用户。两者都会在保存用户数据之前对密码进行加密。

4. 创建用户序列化器

序列化器用于在 Django Rest Framework 中将模型转换为 JSON 格式数据。我们需要在 serializers.py 文件中创建一个用户序列化器。

from rest_framework import serializers
from .models import CustomUser

class CustomUserSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True)

    class Meta:
        model = CustomUser
        fields = ('email', 'first_name', 'last_name', 'password')

    def create(self, validated_data):
        user = CustomUser.objects.create_user(
            email=validated_data.get('email'),
            first_name=validated_data.get('first_name'),
            last_name=validated_data.get('last_name'),
            password=validated_data.get('password'),
        )
        return user

上面的代码中,password 字段用于接收用户输入的密码,write_only=True 表示该字段只用于写入数据。create 方法用于创建用户。

5. 创建用户视图

在 Django Rest Framework 中,视图负责处理 HTTP 请求并返回响应。我们需要在 views.py 文件中创建一个用户视图。

from rest_framework import generics
from rest_framework.permissions import AllowAny
from .serializers import CustomUserSerializer

class CustomUserCreate(generics.CreateAPIView):
    serializer_class = CustomUserSerializer
    permission_classes = [AllowAny]

上面的代码中,CustomUserCreate 视图继承了 Django Rest Framework 自带的 generics.CreateAPIView 类,该类封装了创建数据的逻辑。serializer_class 设置该视图所使用的序列化器,permission_classes 设置该视图的权限为任意用户可访问。

6. 测试

现在,我们已经完成了创建用户的所有代码。我们可以通过调用视图中定义的 URL 来测试代码是否正常工作。在 urls.py 文件中添加以下代码:

from django.urls import path
from .views import CustomUserCreate

urlpatterns = [
    path('users/', CustomUserCreate.as_view(), name='users'),
]

现在,我们可以使用 HTTP POST 请求来创建用户。以下是一个使用 cURL 命令创建用户的示例:

curl -X POST -d "email=john@example.com&first_name=John&last_name=Doe&password=secret" http://localhost:8000/users/

如果创建成功,系统将会返回 HTTP 201 Created 状态码和新创建用户的 JSON 数据。

总结

以上就是在 Django Rest Framework 中创建用户和用户配置文件的全部过程。通过这些代码,你可以轻松地构建自己的用户管理系统。当然,这只是一个简单的示例,你可以根据自己的项目需求进行更改和扩展。