Вопрос по jquery, ajax – csrf с постом ajax и django

4

Используя jquery1.7.1 и django1.3, я пытался сделать пост-запрос через ajax, в некотором учебном коде, который я нашел наWeb

<code>$(document).ready(function(){
    $("#create").click(create_note);

});

var create_note = function() {
  var title = $("#title").val()
  var slug = $("#slug").val()
  if (title != "" && slug != "") {
    var data = { title:title, slug:slug };
    console.log('title='+title);
    console.log('slug='+slug);
    var args = { type:"POST", url:"/create/", data:data, complete:done };
    $.ajax(args);
  }
  else {
    // display failure
  }
  return false;
};
</code>

URL & quot; / create / & quot; отображается на вид Джанго

<code>(r'^create/$','notes.views.create_note'),

def create_note(request):
    error_msg = u"No POST data sent."
    if request.method == "POST":
        post = request.POST.copy()
        if post.has_key('slug') and post.has_key('title'):
            slug = post['slug']
            if Note.objects.filter(slug=slug).count() > 0:
                error_msg = u"Slug already in use."
            else:
                title = post['title']
                new_note = Note.objects.create(title=title,slug=slug)
                return HttpResponseRedirect(new_note.get_absolute_url())
        else:
            error_msg = u"Insufficient POST data (need 'slug' and 'title'!)"
    return HttpResponseServerError(error_msg)
</code>

Когда я нажимаю кнопку отправки, которая запускает функцию JavaScriptcreate_note Я получаю ошибку 403. Должно быть проблема csrf ..

Я попытался решить эту проблему, изменив функцию готовности

<code>$(document).ready(function(){
        $.ajaxSetup({
        data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
    });
        $("#create").click(create_note);

    });
</code>

но это не сработало .. Я все еще получаю403 error

Итак, я попытался изменить данные вajax вызов

<code>var create_note = function() {
    var data = { title:title, slug:slug ,csrfmiddlewaretoken: '{{ csrf_token }}'};
    ...
    var args = { type:"POST", url:"/create/", data:data, complete:done };
    $.ajax(args);

};
</code>

Тем не менее это вызывает ошибку 403 ..

Пожалуйста, скажите мне, что нужно сделать, чтобы исправить это .. Я видел Django Doc об этом, но я запутался, как использовать это. Должен ли я скопировать весьjQuery(document).ajaxSend(... код в мой файл JavaScript .. Я действительно смущен здесь ..

Ваш Ответ

1   ответ
4

как документ, на который вы ссылаетесь, предлагает) скопировать весьajaxSend метод ...

Вам не нужно изменять его каким-либо образом - это полное решение -ajaxSendетод @ на самом деле является обработчиком событий дляajaxSend мероприятие. Его срабатывает, когда вы используете.ajax метод в jQuery. См. AjaxОтправить документы здесь

Метод, указанный в приведенном выше документе, добавляет правильныйX-CSRFToken заголовок вашего AJAX-запроса. Затем вы можете использовать свой первый метод для отправки запроса AJAX.

Спасибо @ManseUK, я тоже наткнулся на это предложение .. Stackoverflow.com / а / 5107878/1291096 damon
@ Деймон, тот же код ... ManseUK
? это на самом деле не отвечает на вопросгд Один предназначен для размещения кода ajaxSend. Просто в html файле? В блокноте? bharal
@ bharal - это метод JavaScript - так что либо в библиотеке, на которую вы ссылаетесь, либо на странице, которая требует этого, вопрос заключался не в том, где ее разместить, а в том, как решить проблему .... ManseUK

Похожие вопросы