3
我創建了一個Django的REST的框架API,讓我成功運行通過命令行這樣一個PUT請求:爲什麼我在從網站執行jQuery Ajax PUT時遇到CSRF錯誤?從命令行運行良好。
% curl -X PUT -u myUser:myPassword http://127.0.0.1:3001/api/myEndpoint/64/
{"id": 64, "myAttr1": "Blah1", "myAttr2": "Blah2"}
在我的web應用程序,我有以下的JQuery AJAX是(我理解它)應該運行相同的指令,如果我的身份登錄myUser
:
$.ajax(
{
url: "/api/myEndpoint/64/",
type: "PUT",
success: function(data)
{
console.log("Do Something Here");
}
}
);
當此阿賈克斯命令運行,但是,我看到在Chrome開發控制檯以下錯誤:
PUT http://127.0.0.1:3001/api/myEndpoint/64/ 403 (FORBIDDEN)
在進一步調查之後我也發現了這個Django的警告時,我跑了。阿賈克斯:
WARNING [django.request:99] Forbidden (CSRF token missing or incorrect.): /api/myEndpoint/64/
爲什麼在命令行而不是從我的網頁瀏覽器這項工作?我如何完成這項工作?我不完全瞭解CSRF的工作原理。會喜歡它只是工作。
作爲參考,在這裏是從views.py摘錄:
class MyEndPoint(mixins.UpdateModelMixin, generics.GenericAPIView):
queryset = MyObject.objects.all()
serializer_class = MyObjectSerializer
def put(self, request, *args, **kwargs):
logger.debug("myID = %s" % kwargs["myID"])
...
這裏是urls.py摘錄:
url(r'^api/myEndpoint/(?P<myID>\d+)/?$', views.MyEndPoint.as_view()),
謝謝湯姆。並感謝創造這樣一個偉大的框架。 –