为Django启用CSRF

gmol1639  于 2023-02-10  发布在  Go
关注(0)|答案(1)|浏览(144)

我在Djangowww.example.com中有以下的python代码views.py,该代码接收JSON主体并将提取的数据发送到另一个API端点,我在这里简化了代码。
我如何启用csrf,使它将令牌发送回这个方法的调用者?我从postman调用这个方法。

@csrf_protect
def validate_booking(request):
  if request.method != "POST":
    return HttpResponseServerError("Invalid HTTP method")
  body = json.loads(request.body)
  booking_details = body["booking_details"]

    DATA = {
      "name": booking_details["name"],
      "nric": booking_details["nric"],
      "booking_id": booking_details["booking_id"]
    }

  return HttpResponse(status="200")

这个网站指示把这段代码放在我的方法中。但是“a_template.html”是什么呢?https://docs.djangoproject.com/en/4.1/ref/csrf/

@csrf_protect
def my_view(request):
    c = {}
    # ...
    return render(request, "a_template.html", c)
83qze16e

83qze16e1#

这不是一件容易的事情,因为CSRF是2个步骤的事情
1.有一个传递给客户端的值,该值保存到服务器上的会话中。
1.收到POST请求时,客户端应在正文中将其作为csrfmiddlewaretoken发送,服务器将根据服务器会话中存储的值检查该值。
因此,这在API中是不可行的,因为您需要的会话管理不是REST API实现。

相关问题