ajax django forms e GET

75 views
Skip to first unread message

rodrigo koblitz

unread,
Aug 12, 2012, 4:32:42 PM8/12/12
to django...@googlegroups.com
Buenos,
estou com dúvida no ajax pois só 'envio' GET, mas quero que seja POST.

[12/Aug/2012 15:24:27] "GET /entra/get_metodos/?empresa=1 HTTP/1.1" 200 1248

Estou fazendo isso sem o {% csrf_token %}, pois quando eu o utilizo recebo esse estranho erro:

[12/Aug/2012 15:27:16] "GET /entra/get_metodos/?csrfmiddlewaretoken=IR7bnPfVcFwnb5COl9WJdBzGL9bQZUny&empresa=1 HTTP/1.1" 200 1383

porque não envia como POST? porque não entende que é ajax?

Se alguém puder ajudar será muito bem vindo,

A views,, .html e urls.py em:
http://pastebin.com/9HPyVEQr

abs,
Koblitz

Fábio Cerqueira

unread,
Aug 12, 2012, 4:40:14 PM8/12/12
to django...@googlegroups.com
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

Ou desabilite o csrf para essa view com o decorator: csrf_exempt

2012/8/12 rodrigo koblitz <rodrigo...@gmail.com>:
> --
> Django Brasil em Google Groups
> <http://groups.google.com.br/group/django-brasil>
> Associe-se à Python Brasil e suporte nossa comunidade!
> <http://associacao.python.org.br/>



--
Fábio Cerqueira

Sams

unread,
Aug 13, 2012, 8:07:23 AM8/13/12
to django...@googlegroups.com
para resolver no meu caso, fiz o seguinte.

primeiro voce poe na sua chamada ajax este parametro: type:'POST'

segundo, adicionei este código e ele passou embutir no POST o csrf

ah sim, isto funciona para Jquery... nao sei como seria os outros...

e está funcionando, voce só deve precisar fazer algumas adaptações para seu código provavelmente...

até

koblitz

unread,
Aug 13, 2012, 5:51:09 PM8/13/12
to django...@googlegroups.com
Sams,
achei meio complicado em adicionar esse jquery no template, estou matutando em como fazer isso, mas obrigado!

abs,
Koblitz

koblitz

unread,
Aug 13, 2012, 5:51:58 PM8/13/12
to django...@googlegroups.com
Putz,
mas não quero jogar fora o csrf, ele será importante.
abs,
Koblitz

koblitz

unread,
Aug 14, 2012, 3:58:50 PM8/14/12
to django...@googlegroups.com
Buenos,
para dar um retorno,
Parece a questão é que precisa colocar um 'return false', para que não se confunda o submit do html com o submit do ajax. Foi o que entendi e deucerto.

'In order to override an html button's (or in this case a submit input's) default click behavior, you must return false. Otherwise the button's normal behavior will still occur (which in this case would mean trying to create the same note twice, and redirecting the user to an error page instead of the freshly minted note). '

http://lethain.com/intro-to-unintrusive-javascript-with-django/

abs,
Koblitz

koblitz

unread,
Aug 15, 2012, 2:35:50 PM8/15/12
to django...@googlegroups.com
Buenos,
acho que a solução do 'return false' que falei não é solução.
Resolveu parte do problema, mas simplesmente não estou conseguindo enviar nada via ajax. No Firebug, nunca aparece nada no 'post', sempre vazio.
Voltei ao problema inicial. CSRF.

Estou usando o mais simples dos forms. CharField apenas, sem nenhum choice...

Artur,
esse solução parece boa, como fica esse arquivo estático? começa lá com '$document.ready'....? eu poderia ter apenas um $ajax() por lá? Voce poderia mostrar?

pelo que entendi, para não ter mais a questão do CSRF eu posso deixá-lo no template e também no settings e basta eu colocar o decorador @csrf_exempt na views que receberá a requisição ajax e tudo funciona. Certo? Estou aqui por agora, ao menos para testar. Obrigado Fábio.
Pretendo ficar usando o ajax(), se der.

Agora, putz, porque as requisições POST não enviam nada. Não sei mais por onde testar.
já fiz centenas (centenas, é verdade) de combinações com o ajax(), colocando o 'data', sem ele e etc....  Testei algumas coisas com o ajaxSend e .post, mas sem sucesso.

tudo em:

o que me retorna é: metodo_none

"if request.is_ajax():

metodo=request.POST.get('metodo',None)

if metodo is None:

met='metodo_none' "


qualquer ajuda será MUUUUUUUUUUUUUUUITO bem vinda....


abs,

Koblitz


koblitz

unread,
Aug 16, 2012, 1:45:42 PM8/16/12
to django...@googlegroups.com
Umas das questões era de lógica de views.

    if request.is_ajax():
        try:
            form=Empresas(request.POST)
            empresa=form.save(commit=False)
        except:
            empresa='except_post_in_ajax'
        return HttpResponse(empresa)
é diferente disso:
    if request.is_ajax():
        form=Empresas(request.POST)
        try:
            empresa=form.save(commit=False)
        except:
            empresa='except_post_in_ajax'
        return HttpResponse(empresa)

Não entendi porque...

Agora o que consegui de ver o erro infantil é que em algum momento dos testes passei a renderizer um Form que não era o que tentava pegar no reques.POST. p.

abs e obrigado pelas respostas,
Koblitz

Outra questão é a aba content>>POST do fi

koblitz

unread,
Aug 16, 2012, 1:58:13 PM8/16/12
to django...@googlegroups.com
Uma última questão.. tola também, é que eu não estava indicando corretamente as tags no html

<div class="new">

<form action="." method="POST">
isso explica o porque que a aba POST do js sempre aparecia vazia.
<form id="new" action....

acho que foram esses os erros.

abs,
Reply all
Reply to author
Forward
0 new messages