csrf z postem ajax i django
Używając jquery1.7.1 i django1.3, próbowałem wysłać żądanie przez ajax, w jakimś kodzie samouczka, który znalazłemsieć
<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>
Adres URL „/ create /” jest odwzorowany na widok 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>
Kiedy klikam przycisk wysyłania, który uruchamia funkcję javascriptcreate_note
, Dostaję błąd 403. To musi być problem csrf ..
Próbowałem to rozwiązać, modyfikując gotową funkcję
<code>$(document).ready(function(){ $.ajaxSetup({ data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, }); $("#create").click(create_note); }); </code>
ale to nie zadziałało403 error
Próbowałem zmodyfikować dane wajax
połączenie
<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>
Nadal powoduje błąd 403.
Proszę, powiedz mi, co należy zrobić, żeby to poprawić ... Widziałemdjango doc o tym, ale jestem zdezorientowany, jak z tego skorzystać. Czy powinienem skopiować całyjQuery(document).ajaxSend(...
kod do mojego pliku javascript .. Jestem naprawdę zdezorientowany ..