csrf с постом ajax и django
Используя 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 .. Я действительно смущен здесь ..