簡體   English   中英

禁止 Django Rest Framework 刪除

[英]Django Rest Framework Delete forbidden

我目前正在努力解決一些 django rest 框架問題。 我想為我的 APIView 定義一個刪除請求。

這是我的view.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 forbidden。

有人知道為什么嗎?

除非您使用 get_serializer() ,否則序列化器類是什么並不重要,即使這樣它也可以很好地處理您的 get 請求。 我相信您的刪除問題是您可能正在使用 SessionAuthentication 或 BasicAuthentication(DRF 的默認設置)。 嘗試使您的視圖 csrf_exempt。

為您的 APIView 設置authentication_classes = [] DRF默認有SessionAuthentication和BasicAuthentication,需要關閉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM