📅  最后修改于: 2023-12-03 15:08:36.105000             🧑  作者: Mango
在基于 Django 的 Web 应用程序中,处理用户的注册、登录、编辑和其他相关操作是很常见的任务。Django Rest Framework 提供了许多方便的功能来处理这些任务。本文将介绍如何在 Django Rest 框架中创建用户和用户配置文件。
如果你还没有安装 Django Rest Framework,可以使用 pip 进行安装:
pip install djangorestframework
首先,我们需要在 models.py
文件中创建一个用户模型。该模型一般继承 Django 自带的 AbstractBaseUser
和 PermissionsMixin
类,并添加一些自定义字段。
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_name
和 last_name
字段则用于保存用户的姓和名。CustomUserManager
是我们后面要创建的一个自定义的用户管理器。
接下来,我们需要在 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
方法用于创建超级用户。两者都会在保存用户数据之前对密码进行加密。
序列化器用于在 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
方法用于创建用户。
在 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
设置该视图的权限为任意用户可访问。
现在,我们已经完成了创建用户的所有代码。我们可以通过调用视图中定义的 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 中创建用户和用户配置文件的全部过程。通过这些代码,你可以轻松地构建自己的用户管理系统。当然,这只是一个简单的示例,你可以根据自己的项目需求进行更改和扩展。