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()),
谢谢汤姆。并感谢创造这样一个伟大的框架。 –