如何使用Django rest api进行登录

如何使用Django rest api进行登录,django,rest,server,backend,Django,Rest,Server,Backend,您好,我正在学习Django rest api,我正在学习其他人的代码,但我不知道如何登录 我的代码: 型号: class User(models.Model): class Meta: db_table = "users" created_at = models.DateTimeField(default = timezone.now) updated_ay = models.DateTimeField(auto_now= True) emai

您好,我正在学习Django rest api,我正在学习其他人的代码,但我不知道如何登录

我的代码:

型号:

class User(models.Model):
    class Meta:
        db_table = "users"

    created_at = models.DateTimeField(default = timezone.now)
    updated_ay = models.DateTimeField(auto_now= True)
    email = models.CharField(max_length = 128, unique= True)
    password = models.CharField(max_length = 255)
    active = models.BooleanField(default=False)
    token = models.CharField(max_length= 255, null = True)
    nickname = models.CharField(max_length = 255, null = True)
序列化程序:

class UserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField()

    class Meta:
        model = User
        fields = '__all__'

    def to_internal_value(self, data):
        ret = super(UserSerializer, self).to_internal_value(data)

        # cipher = AESSipher()
        # ret['password'] = cipher.encrypt_str(ret['password'])

        return ret

    def to_representation(self, obj):
        ret = super(UserSerializer, self).to_representation(obj)
        print(ret)
        return ret

    def validate_email(self, value):
        if User.objects.filter(email=value).exists():
            raise serializers.ValidationError("Email already exists")
        return value

    def validate_password(self, value):
        if len(value) < 8:
            raise serializers.ValidationError("The password must be at least %s characters long. " % 8)
        return value

    def create(self, validate_data):
        user = User.objects.create(
            email = validate_data['email'],
            password = validate_data['password'],
        )

        user.active = False
        user.save()

        message = render_to_string('user/account_activate_email.html', {
            'user': user,
            'domain' : 'localhost:8000',
            'uid': urlsafe_base64_encode(force_bytes(user.pk)),
            'token': account_activation_token.make_token(user)
        })


        mail_subject = 'sign up mail.'
        to_email = 'mymail@gmail.com'
        email = EmailMessage(mail_subject, message, to=[to_email])
        email.send()

        return validate_data
因为我想在移动客户端部分处理登录状态, 我想在登录时只获取用户模型信息

当在客户端输入电子邮件和密码时,我想获得用户信息


如何登录?你认识谁吗?

这是文章的链接:自定义用户身份验证;它应该对你有帮助

您好,您可以为此使用Django软件包。例如,您可以使用rest auth软件包此软件包具有登录、注销和重置密码所需的所有内容,您只需遵循rest auth文档即可: . .

class SignUp(APIView):
    def post(self, request):
        serializer = UserSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_200_OK)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)




class UserActivate(APIView):
    permission_classes = (permissions.AllowAny,)

    def get(self, request, uidb64, token):
        try:
            uid = force_text(urlsafe_base64_decode(uidb64))
            user = User.objects.get(pk = uid)
        except(TypeError, ValueError, OverflowError, User.DoesNotExist):
            user = None
        try:
            if user is not None and account_activation_token.check_token(user, token):
                user.active = True
                user.token = token
                user.save()
                return Response(user.email + 'email active', status=status.HTTP_200_OK)
            else:
                return Response('Expired Link', status=status.HTTP_400_BAD_REQUEST)

        except Exception as e:
            print(traceback.format_exc())