2

我正在尝试将来自 javascript 的 $post 请求用于我的 django 模板,但是我缺少一些东西,因为它不起作用。

我将向您展示我的代码:

这是模板:

//TEMPLATE
//This code will send a string to django "views.py" file,
//then it will show a pop up message from the data retreived from "views.py"

function test_post(){ 
   $.post("/xhr_test", 
      {name: "Monty", food: "Spam", csrftoken : "{{ csrf_token }}" },

      function(data) {
          alert(data)
      ;}); 
};

这是views.py:

// VIEWS.PY
//Depending on the type of request it will send a message or another.


def xhr_test(request):
    if request.is_ajax():
        if request.method == 'GET':
            message = "This is an XHR GET request"
        elif request.method == 'POST':
            message = "This is an XHR POST request"
            # Here we can access the POST data
            print request.POST
    else:
        message = "No XHR"
    return HttpResponse(message)

此代码未按应有的方式显示“这是一个 XHR POST 请求”消息。但是,当使用 $get 请求时,它确实显示“这是一个 XHR GET 请求”消息。

类似的疑问是this thread的答案。即使我使用那里提供的答案,代码也不起作用。

我猜答案一定与“{{ csrf_token }}”有关,但不确定如何......

任何类型的帮助将不胜感激。

4

2 回答 2

0

csrf 令牌的正确发布键是csrfmiddlewaretoken如果您遵循默认的使用方式django.middleware.csrf.CsrfViewMiddleware

但是,您应该查看 CSRF文档中的 AJAX 部分。

于 2013-01-15T09:56:20.233 回答
0

如果这是由于 csrf 令牌(您可以使用 firebug 在浏览器中检查它),然后在您的 views.py 中使用它

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def xhr_test(request):
   ...........
于 2013-01-15T09:59:11.263 回答