我想从我的Likes
表中删除点赞。为此,我从前端发出axios呼叫,
axios({
method: "delete",
url:
http://127.0.0.1:8000/api/delete/ ,
params: { companyid: xyz }
})
应该删除其中包含company_id = xyz
的类似图片。
网址看起来像这样
path('delete/', DeleteLikesView.as_view()),
(/api/
包含在项目的urls.py中。请注意...)
和DeleteLikesView
-
class DeleteLikesView(DestroyAPIView):
queryset = Likes.objects.all()
serializer_class = LikesSerializer
def perform_destroy(self, request):
print(self.kwargs['companyid'])
companyid = self.kwargs['companyid']
instance = Likes.objects.get(
company_id=companyid, user_id=request.user.id)
instance.delete()
我要么陷入错误403
(csrf_token错误。尽管我尝试使用csrf_exempt,但没有运气)或不允许405
方法(我将其称为this)。这个问题让我回到403
错误)
感谢您的帮助。谢谢!
答案 0 :(得分:0)
在请求中设置xsrfHeaderName,如下所示:
// ...
xsrfHeaderName: "X-CSRFToken",
// ...
在settings.py中添加CSRF_COOKIE_NAME
CSRF_COOKIE_NAME = "XSRF-TOKEN"
答案 1 :(得分:0)
您可以使用令牌身份验证而不是basicauth,如果使用令牌身份验证,则不会出现csrf错误。 你写了
instance = Likes.objects.get(company_id=companyid, user_id=request.user.id)
在上面的代码中,user_id = request.user.id无效,因为您尚未登录会话。您使用的是api,您需要提供一个令牌来告诉哪个用户正在访问api。
答案 2 :(得分:0)
您必须使用装饰类。 要修饰基于类的视图的每个实例,您需要修饰类定义本身。为此,您可以将修饰符应用于该类的 dispatch()方法。
from django.views.decorators.csrf import csrf_exempt
class DeleteLikesView(DestroyAPIView):
...
@method_decorator(csrf_exempt)
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
def perform_destroy(self, request):
...
查看更多信息: https://docs.djangoproject.com/en/2.2/topics/class-based-views/intro/#decorating-the-class