为什么在 Set-Cookie header 字段中找不到 CSRF 令牌?

why CSRF token is not found in Set-Cookie header field?

我有一个 Django Rest-framework APIView class,如下所示:

class HelloView(APIView):

    def get(self, request):
        clients = client.objects.all()
        serializer = ClientSerializerAPIView(clients, many=True) 
        return Response(serializer.data)
    def post(self, request):
        serializer = ClientSerializerAPIView(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_404_NOT_FOUND)

当我通过邮递员发送获取请求时,邮递员的 cookie 部分中有一个 csrf 令牌,但问题是我收到的 header 文件中没有 Set-Cookie 字段从.

克 csrftoken

这是在 cookie 中而不是在 header 中,您应该在 header 中发送 X-CSRFToken 键。

您必须使用 ensure_csrf_cookie:

装饰您的视图
from django.views.decorators.csrf import ensure_csrf_cookie
from django.utils.decorators import method_decorator


@method_decorator(ensure_csrf_cookie, name='dispatch')
class MyView(APIView):
    ...

您还可以发送有效的 csrf 令牌作为 django.middleware.csrf.get_token(request) 收到的响应 并进行相应设置。