$.ajax({
url:'/',
type: "POST",
data: {name: 'name', age: 'age'},
success:function(response){},
complete:function(){},
error:function (xhr, textStatus, thrownError){}
});
在 views.py 中:
class SomeView(generic_views.TemplateView):
template_name = 'something.html'
def get(self, request, *args, **kwargs):
...something...
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
name = request.POST['name']
age = request.POST['age']
...something...
我得到:[05/Oct/2012 12:03:58] "POST/something/HTTP/1.1"403 2294
我想通过 jQuery 将此数据(姓名和年龄)发送到“SomeView”中的此发布功能。这与加载的模板是相同的 View ,只是请求类型不同。在 get() 模板加载和发布时,应该调用 post() 函数。可能吗?我检查了其他问题并得到了这个解决方案。它应该工作。我做错了什么?
最佳答案
你的问题的答案是你做错了什么,是:不多!
如果传入的 POST 请求未通过 Csrf 检查,Django 将返回 403 响应(禁止访问)。 您可以通过 jQuery 的 ajaxSetup 执行此操作,找到代码片段 here
这对 GET 请求起作用的原因很简单,就是 GET 请求没有被 csrf 中间件检查。
由于您正在此处构建表单,因此需要考虑的另一件事是使用基于类的表单。他们为您处理获取/发布以及参数验证。井井有条。特别是当您制作表单来编辑/创建/删除模型实例时,在这种情况下您可以享受 ModelForms 的强大功能。和创建 View 。非常整洁。
掌握那些基于通用类的 View 可能需要一些时间。但这是非常值得的。
关于javascript - Django jQuery 发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12744159/