如何允许匿名 post 请求,但拒绝 Django 中未经授权的获取请求?

How to allow anonymous post requests, but deny unauthorized get requests in django?

在 C# 中,您可以轻松地将 [AllowAnonymous] 附加到请求,以便可以使用该特定方法。然而,在 Django 中,我对视图、序列化器、...

有点困惑

ViewSet 允许您查看某个 Serializer class 包含的内容,我说得对吗?如果是这样,我当然希望在用户的情况下隐藏它。

class UserViewSet(viewsets.ModelViewSet):

    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer
    authentication_classes = (TokenAuthentication,)
    permission_classes = (IsAuthenticated,)

我就是这样实现的,效果很好。因此,当我转到 http://127.0.0.1:8000/api/users/ 时,我收到一条错误消息,提示我未通过身份验证。

现在的问题是注册新用户。

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ['id', 'username', 'email', 'password']
        extra_kwargs = {'password': {'write_only': True, 'required': True}}

    def create(self, validated_data, AllowAny):
        user = User.objects.create_user(**validated_data)
        return user

当我在我的 Angular 应用程序中使用新注册的 userData 使用 post 请求点击 http://127.0.0.1:8000/api/users/ 时,我显然遇到了身份验证错误。

如何解决我或任何没有足够权限的人不允许查看用户数据,但每个人都可以创建 (post) 新用户的问题?

重写 get_permissions(...) 方法 ModelViewSet as,

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer
    authentication_classes = (TokenAuthentication,)
    <b>permission_classes = (IsAuthenticated,) # default permission class for this view</b>

    <b>def get_permissions(self):
        if self.request.method == 'POST':
            return []
        return super().get_permissions()</b>