【问题标题】:How can I create custom user model for different user types using django rest framework如何使用 django rest 框架为不同的用户类型创建自定义用户模型
【发布时间】:2020-10-28 16:56:31
【问题描述】:

我是 django rest 框架的新手,我想创建不同类型的用户“我认为应该是 4”,(学生、教师、员工和管理员)我希望员工用户注册教师和学生用户.我想使用自定义用户模型并使用电子邮件注册和登录,可以做到吗,请帮忙,我一直在寻找可以帮助我理解如何做的任何事情

【问题讨论】:

标签: django django-models django-rest-framework


【解决方案1】:

您可以使用 AbstractUser ,这非常简单,因为类 django.contrib.auth.models.AbstractUser 提供了默认 User 作为抽象模型的完整实现。

**
    from django.db import models
    from django.contrib.auth.models import AbstractUser
    USER_TYPE_CHOICES = (
     ('student', 'student'),
     ('teacher', 'teacher'),
     ('staff', 'staff'),
     ('admin', 'admin'),
                        )
    class User(AbstractUser):
       user_type = models.CharField(max_length=40,choices=USER_TYPE_CHOICES)
**

之后,您必须更新定义 AUTH_USER_MODEL 属性的 settings.py。

 AUTH_USER_MODEL = 'Your app name.User'

您可以在您的 serializers.py 中作为用户名发送电子邮件:

class RegisterSerializer(serializers.ModelSerializer):
    password1 = serializers.CharField(write_only=True)

    class Meta:
      model = User
      fields = ('first_name', 'last_name', 'email', 'password','password1',  'user_type',)

    def validate(self, attr):
       validate_password(attr['password'])
       return attr

    def create(self, validated_data):
          user = User.objects.create(
                username=validated_data['email'],
                user_type=validated_data['user_type'],
                email=validated_data['email'],
                first_name=validated_data['first_name'],
                last_name=validated_data['last_name'],

                )
        user.set_password(validated_data['password'])
        user.save()



       return user

现在,您可以在您的 views.py 中使用此序列化程序并创建具有不同用户类型的用户

最好的问候,

【讨论】:

    【解决方案2】:

    是的,它绝对可以完成,请查看这个! https://docs.djangoproject.com/en/3.1/topics/auth/customizing/#extending-user

    【讨论】:

      猜你喜欢
      • 2017-08-19
      • 2018-05-21
      • 2019-01-12
      • 2020-08-09
      • 2018-06-11
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      相关资源
      最近更新 更多