Temat: Django / dajaxice Error 403 (Forbidden)

Witam. Napisałem aplikację webową opartą częściowo na dajaxice. Wszystko działało super do czasu, kiedy któregoś dnia okazało się, że nie działa. Stronki się wczytują, response'y trafiają do serwera, ale problem jest z wywoływaniem ajaxowych funkcji po stronie serwera. Kiedy taka funkcja powinna zostać wywołana, dostaję od serwera (django dev server) następujący komunikat:

"POST /dajaxice/desc.returnModels/ HTTP/1.1" 403 2326


desc to nazwa aplikacji django a returnModels to nazwa funkcji w ajaxie.

Dam się pociąć za to, że w kodzie wszystko jest ok, zarówno po stronie pythona jak i javascriptu. Problem leży prawdopodobnie w uprawnieniach do plików.

Wszystko działa na Ubuntu 10.

Proszę o jakieś naprowadzenie na potencjalną przyczynę błędu, bo pierniczę się z tym od jakiegoś czasu.

Temat: Django / dajaxice Error 403 (Forbidden)

Wskazówka:

To nie kwestia Ajaxa ale ogólnie rzecz biorąc metody POST. Stworzyłem formularz wykorzystujący POST i po wywołaniu submit otrzymałem:



Forbidden (403)

CSRF verification failed. Request aborted.

Help

Reason given for failure:

No CSRF or session cookie.


In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly.

Maciek Kuchnik

Maciek Kuchnik Właściciel
Indelso.pl,
programista, PM

Temat: Django / dajaxice Error 403 (Forbidden)

masz dodany w templacie {% csrf_token %} ?

np tak:
<form action="" method="post">{% csrf_token %}Maciek Kuchnik edytował(a) ten post dnia 23.03.11 o godzinie 01:57

Temat: Django / dajaxice Error 403 (Forbidden)

Dodałem. Zero zmian.
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: Django / dajaxice Error 403 (Forbidden)

context_instance=RequestContext(request) <-a tą linijkę masz w widoku?
{% csrf_token %} bez tego nie działa.

return render_to_response("templejtka.html", context, context_instance=RequestContext(request))

Temat: Django / dajaxice Error 403 (Forbidden)

Ok, spróbuję w wolnej chwili :) Dzięki z góry za odpowiedzi.
Piotr Jarolewski

Piotr Jarolewski Software Engineer at
Grupa Allegro

Temat: Django / dajaxice Error 403 (Forbidden)

Podejrzewam że AJAX, ma zdefiniowaną listę pół formularza i będziesz musiał przekazać dodatkowe pole POST csrf_token do ajaksa, powinno ruszyć.

konto usunięte

Temat: Django / dajaxice Error 403 (Forbidden)

Django od wersji 1.2.5 sprawdza csrf_token dla POST-owych requestów ajaxowych.
http://www.djangoproject.com/weblog/2011/feb/08/security/Daniel Kopka edytował(a) ten post dnia 23.03.11 o godzinie 14:12

Temat: Django / dajaxice Error 403 (Forbidden)

Korzystam właśnie z 1.2.5.

Temat: Django / dajaxice Error 403 (Forbidden)

Michał Jastrzębski:
context_instance=RequestContext(request) <-a tą linijkę masz
> w widoku?
{% csrf_token %} bez tego nie działa.

return render_to_response("templejtka.html", context, context_instance=RequestContext(request))

RequestContext is not defined.

Coś trzeba doimportować?
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: Django / dajaxice Error 403 (Forbidden)

no tak...

Temat: Django / dajaxice Error 403 (Forbidden)

Okej. Do tej pory renderowałem szablon ręcznie (open -> read -> render -> close). Przerobiłem na render_to_response i dostaję info pt. "TemplateDoesNotExist", podczas, kiedy template jest we wskazanej lokalizacji (open go otwiera).

Wniosek - muszę mieć coś namieszane z uprawnieniami do plików, ale kompletnie nie wiem, co.

konto usunięte

Temat: Django / dajaxice Error 403 (Forbidden)

Jak problem jest z dajaxice to masz za starą wersje, 0.1.8 działa z django 1.2.5.
Konrad Delong

Konrad Delong programista

Temat: Django / dajaxice Error 403 (Forbidden)

Może chodzi o to że podajesz złą ścieżkę. render_to_response nie szuka pliku w katalogy podanym relatywnie do roota projektu, czy ścieżki do pliku, tylko przeszukuje TEMPLATE_DIRS, więc jeżeli trzymasz szablony w $PROJECT_ROOT/templates, i otwierałeś je open("templates/appname/templatename.html").read(), to w render_to_response podasz ścieżkę bez tego "templates" na początku, które wrzucisz do settingsów. W taki sposób jest to zrobione w tutorialu Django na początku dokumentacji, jeśli chcesz przykład.

Temat: Django / dajaxice Error 403 (Forbidden)

Przepraszam za moje skrajne noobstwo. Wszystkie wasze sugestie były absolutnie prawidłowe - chodziło o CSRF Token i template dir w settingsach, czyli dokładnie tak ja mówiliście.

Dzięki wielkie!

Temat: Django / dajaxice Error 403 (Forbidden)

Żeby już totalnie nie śmiecić, podepnę się pod swój temat jeszcze z następującym pytaniem:

Czy ktoś może polecić jakiś tutorial do zarządzania statycznymi plikami w Django? (media etc. - to kolejna sprawa, którą staram się ogarnąć).
Konrad Delong

Konrad Delong programista

Temat: Django / dajaxice Error 403 (Forbidden)

Dokumentacja ze strony powinna Ci wystarczyć. Sprawa się trochę zmieniła w Django 1.3, więc uważaj na to. Jeśli będziesz miał pytania, ludzie na #django na freenode na pewno Ci pomogą.

Temat: Django / dajaxice Error 403 (Forbidden)

[del]Paweł Sopel edytował(a) ten post dnia 28.03.11 o godzinie 01:09

Następna dyskusja:

Django - wyszukiwanie




Wyślij zaproszenie do