【问题标题】:How to allow anonymous post requests, but deny unauthorized get requests in django?如何允许匿名发布请求,但拒绝 django 中未经授权的获取请求?
【发布时间】:2020-07-22 05:01:14
【问题描述】:

在 C# 中,您可以轻松地将 [AllowAnonymous] 附加到请求,以便可以使用该特定方法。但是在 django 中,我对 Views、Serializers、...

有点困惑

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

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 发送帖子请求时点击 http://127.0.0.1:8000/api/users/,我显然遇到了身份验证错误。

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

【问题讨论】:

    标签: django angular django-rest-framework django-authentication


    【解决方案1】:

    ModelViewSetget_permissions(...) 方法覆盖为,

    class UserViewSet(viewsets.ModelViewSet):
        queryset = User.objects.all().order_by('-date_joined')
        serializer_class = UserSerializer
        authentication_classes = (TokenAuthentication,)
        permission_classes = (IsAuthenticated,) # default permission class for this view
    
        def get_permissions(self):
            if self.request.method == 'POST':
                return []
            return super().get_permissions()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 2020-12-30
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      相关资源
      最近更新 更多