一尘不染

Django jQuery发布请求

django

$.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...

我想通过jQuery将此数据(名称和年龄)发送到“ SomeView”中的此发布函数。这是与加载的模板相同的视图,只是请求类型不同。在get()上加载模板,并在post上调用post()函数。可能吗?我检查了其他问题并获得了此解决方案。它应该正在工作。我究竟做错了什么?


阅读 297

收藏
2020-03-27

共1个答案

一尘不染

如果传入的POST请求未能通过Csrf检查,则Django返回403响应(禁止)。你可以通过jQuery的ajaxSetup进行此操作。

这样做对GET请求起作用的原因仅是CSrf中间件不检查GET请求。

好像你在这里构建表单一样,要考虑的另一件事是使用基于类的表单。他们为你处理获取/发布以及参数验证。井井有条。特别是在制作表单以编辑/创建/删除模型实例时,在这种情况下,你可以使用ModelForms和CreateViews的功能。

2020-03-27