"detail": "CSRF 失败:CSRF 令牌丢失或不正确。" Django 休息框架

时间:2021-06-29 15:38:08

标签: django django-rest-framework django-csrf

我的错误:

{
    "detail": "CSRF Failed: CSRF token missing or incorrect."
}

我的模型:

class Booking(models.Model):
    booking_id = models.AutoField(primary_key=True)
    booking_owner = models.TextField(max_length=20)
    booking_city = models.TextField(max_length=20)
    booking_place = models.TextField(max_length=20)
    booking_arrival = models.DateField()
    booking_departure = models.DateField()
    booking_vehicle = models.TextField(max_length=20)
    booking_amount = models.TextField(max_length=20)
    booking_payment_date = models.DateField(default=now)
    booking_status = models.TextField(max_length=10, default=None, blank=True, null=True)
    booking_payment_status = models.TextField(max_length=10, default=None, blank=True, null=True)
    booking_entrance_time = models.TimeField(default=None, blank=True, null=True)
    booking_exit_time = models.DateTimeField(default=None, blank=True, null=True)

    def __str__(self):
        return "%s - %s" % (self.booking_id, self.booking_city)

我的序列化程序:

class AddBookingSerializer(serializers.ModelSerializer):
    class Meta:
        model = Booking
        fields = '__all__'

我的观点:

class BookingAddAPI(APIView):

    @staticmethod
    def post(request):
        data = {}
        try:
            serializer = WitPark.serializers.AddBookingSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                data['status'] = status.HTTP_201_CREATED
                data['message'] = "Data saved successfully"
            else:
                data['status'] = status.HTTP_204_NO_CONTENT
                data['message'] = "Invalid data"
        except Exception as e:
            data['status'] = status.HTTP_404_NOT_FOUND
            data['message'] = "Failed to save the data"
            data['error'] = e

        return Response(data=data)

我还有其他 POST 方法。此 post 方法在本地主机上运行良好,但在实时服务器中无法正常工作 (pythonanywhere.com) 除此之外,所有其他方法在实时服务器上也可以正常运行

1 个答案:

答案 0 :(得分:0)

在进行此 POST API 调用时,您需要将 x0 = -(left_line[1] - right_line[1]) / (left_line[0] - right_line[0]) y0 = x0 * left_line[0] + left_line[1] 作为请求标头传递。

可以在此处找到更多详细信息:https://docs.djangoproject.com/en/3.2/ref/csrf/