【问题标题】:Django Rest Framework Delete forbiddenDjango Rest Framework 禁止删除
【发布时间】:2023-03-28 02:34:01
【问题描述】:

我目前正在努力解决一些 django 休息框架问题。我想为我的 APIView 定义一个删除请求。

这是我的观点.py:

class Employee(APIView):
    permission_classes = (AllowAny, )
    serializer_class = EmployeeSerializer

    def get(self, request, pk, format=None):
        employee = EmployeeModel.objects.get(pk=pk)
        serializer = EmployeeSerializer(employee, many=False)
        return Response(serializer.data)

    def delete(self, request, pk, format=None):
        employee = EmployeeModel.objects.get(pk=pk)
        employee.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

这是我的 urls.py:

urlpatterns = [
    path('', views.index, name='index'),
    path('admin/', admin.site.urls),
    path('api/auth/', include('rest_framework.urls')),
    path('api-token-auth/', obtain_auth_token, name='api_token_auth'),
    path('api/', include(router.urls)),
    path('api/v1/employeelist/', views.EmployeeList.as_view()),
    path('api/v1/employee/<pk>', views.Employee.as_view())
]

序列化器:

class EmployeeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Employee
        fields = '__all__'
        depth = 1

例如,当我调用 /api/v1/employee/4 时,get 方法可以正常工作。 API 的 UI 向我显示了允许的方法:GET、DELETE、HEAD、OPTIONS,但是当我发送删除请求时,我总是收到错误 403 禁止。

有人知道为什么吗?

【问题讨论】:

  • 你能炫耀一下EmployeeSerializer类吗

标签: python django django-rest-framework


【解决方案1】:

为您的 APIView 设置 authentication_classes = []。 DRF默认有SessionAuthentication和BasicAuthentication,需要禁用

【讨论】:

  • 它有效,但奇怪的是,邮递员可以使用 DELETE 方法,但在我添加 authentication_classes = [] 之前,我的异步 Javascript 得到了 403 Forbidden
【解决方案2】:

除非您使用 get_serializer() ,否则序列化程序类是什么并不重要,即使这样它也可以很好地处理您的 get 请求。我相信您的删除问题是您可能正在使用 SessionAuthentication 或 BasicAuthentication(DRF 的默认值)。尝试让您的视图为 csrf_exempt。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 2018-02-13
    • 2019-05-08
    • 2014-12-14
    • 2020-05-24
    • 2019-08-02
    • 2019-02-06
    • 2015-01-16
    相关资源
    最近更新 更多