csrf com ajax e django post
Usando jquery1.7.1 e django1.3, eu estava tentando fazer um pedido de post através do ajax, em algum código tutorial que eu encontreirede
<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>
A url "/ create /" é mapeada para a visualização do django
<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>
Quando clico no botão enviar, que aciona a função javascriptcreate_note
, Recebo um erro 403. Deve ser o problema csrf ..
Eu tentei resolver isso modificando a função pronta
<code>$(document).ready(function(){ $.ajaxSetup({ data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, }); $("#create").click(create_note); }); </code>
mas não deu certo ... eu ainda recebo403 error
Então, eu tentei modificar os dados emajax
ligar
<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>
Ainda isso causa erro 403 ..
Por favor, diga-me o que deve ser feito para corrigir isso ... eu vi odjango doc sobre isso, mas estou confuso sobre como fazer uso disso.jQuery(document).ajaxSend(...
código para o meu arquivo javascript .. estou muito confuso aqui ..