使用CreateMixinModel注册自定义用户模型

时间:2019-07-03 05:16:59

标签: django python-3.x django-rest-framework

我想用MiXin为自定义用户模型编写API。我写了一个CustomUser,它继承了Django用户模型。然后,我定义了具有某些属性的学生资料。在serilizer.py中,我定义了我想从用户那里获取信息的字段。现在在Views.py中,我不知道如何编写代码以使用CreateMixinModel来注册用户

class StudentSignUpView(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView, ):
    """This part is relatng to sign up students a"""
    queryset = Student.objects.all()
    serializer_class = StudentSignUpSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request,**kwargs):
        serializer = self.get_serializer(data=request.POST)
        print("answerrrrrr----------->>>", serializer)
        if serializer.is_valid():
            customusers = CustomUser.objects.all()

我希望能够允许自定义用户注册

1 个答案:

答案 0 :(得分:0)

您可以使用use泛型ListCreateAPIView,而不必自己编写get和post。

所有用户创建都应由序列化程序处理。

尚不清楚Student是否是您的自定义用户模型。我想是这样。

所以您的看法:

class StudentSignUpView( generics.ListCreateAPIView ):
    """This part is relatng to sign up students a"""
    queryset = Student.objects.all()
    serializer_class = StudentSignUpSerializer

您的序列化器:

class StudentSignUpSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student

        fields = ("username", "password")

    def create(self, validated_data):
        user = Student.objects.create_user(username=validated_data["username"],
                                        password=validated_data["password"])

        return user

您可以在序列化器中使用自定义用户模型,并且如果您是从django的AbstractUser继承的,则可以使用create_user方法来创建用户,它还可以做一些神奇的事情(查找实现)。 / p>

如果您需要对某些学生资料进行其他操作(如您提到的那样),则可以在创建用户后在序列化程序中进行操作(也许作为一个原子事务)。