我创建了一个Django Rest Framework API,允许我通过命令行成功运行PUT请求,如下所示:
% curl -X PUT -u myUser:myPassword http://127.0.0.1:3001/api/myEndpoint/64/
{"id": 64, "myAttr1": "Blah1", "myAttr2": "Blah2"}
在我的web应用程序中,我有以下JQueryAJAX,如果我以
myUser
:
$.ajax(
{
url: "/api/myEndpoint/64/",
type: "PUT",
success: function( data )
{
console.log("Do Something Here");
}
}
);
然而,当这个.ajax命令运行时,我在Chrome开发控制台中看到以下错误:
PUT http://127.0.0.1:3001/api/myEndpoint/64/ 403 (FORBIDDEN)
经过进一步调查,我在运行时也发现了Django警告。ajax:
WARNING [django.request:99] Forbidden (CSRF token missing or incorrect.): /api/myEndpoint/64/
为什么从命令行而不是从我的web浏览器执行此操作?我该怎么做?我不完全理解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()),