📜  在 django_Restframework 中使用 AbstractUser 创建自定义用户模型(1)

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

在 Django Restframework 中使用 AbstractUser 创建自定义用户模型

在Django中我们可以使用自带的User模型来实现用户认证,但是有时候我们需要自定义一些字段或方法来满足我们的需求,这时候就需要使用Django的AbstractUser来创建自定义用户模型了。

在使用Django Restframework (DRF)开发API时,需要使用自定义用户模型来代替Django自带的User模型。本文将介绍在DRF中如何使用AbstractUser创建自定义用户模型,让你的API更加符合你的业务需求。

创建自定义用户模型

首先,我们需要在models.py文件中创建自定义用户模型,通过继承AbstractUser类来扩展用户模型。

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    # 添加我们需要的字段
    phone_number = models.CharField(max_length=20)
    address = models.CharField(max_length=100)
    
    # 添加我们需要的方法
    def get_full_address(self):
        return f'{self.address} {self.city} {self.state} {self.country}'

在上面的例子中,我们添加了两个新的字段:phone_numberaddress,以及一个新的方法get_full_address

制定用户模型为默认用户模型

然后,我们需要在settings.py文件中指定我们的自定义用户模型为默认用户模型。

AUTH_USER_MODEL = 'myapp.CustomUser'

在上面的例子中,我们指定了CustomUser为我们的默认用户模型,其中myapp为我们自己的应用名。

更新序列化器

最后,我们需要在序列化器中更新我们的用户模型。

from rest_framework import serializers
from myapp.models import CustomUser

class CustomUserSerializer(serializers.ModelSerializer):
    class Meta:
        model = CustomUser
        fields = ['id', 'username', 'email', 'phone_number', 'address']

class CustomUserDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = CustomUser
        fields = '__all__'

在上面的例子中,我们使用CustomUserSerializerCustomUserDetailSerializer分别序列化列表和详情。

结论

在Django Restframework中使用AbstractUser创建自定义用户模型非常简单。需要注意的是,创建一个自定义用户模型不是所见即所得的操作,你需要仔细考虑你的业务需求并做出相应的扩展。