Mesmo que isso não esteja inteiramente no espírito da SO, eu amo essa pergunta, porque tive o mesmo problema quando comecei, por isso darei um guia rápido. Obviamente, você não entende os princípios por trás deles (não tome isso como uma ofensa, mas se o fizesse, não estaria perguntando).
O Django é do lado do servidor . Isso significa que, digamos que um cliente acesse um URL, você tem uma função views
que renderiza o que ele vê e retorna uma resposta em HTML. Vamos dividir em exemplos:
views.py:
def hello(request):
return HttpResponse('Hello World!')
def home(request):
return render_to_response('index.html', {'variable': 'world'})
index.html:
<h1>Hello {{ variable }}, welcome to my awesome site</h1>
urls.py:
url(r'^hello/', 'myapp.views.hello'),
url(r'^home/', 'myapp.views.home'),
Esse é um exemplo do uso mais simples. Ir para 127.0.0.1:8000/hello
significa uma solicitação para a hello()
função, vai 127.0.0.1:8000/home
retornar index.html
e substituir todas as variáveis conforme solicitado (você provavelmente já sabe tudo isso agora).
Agora vamos falar sobre o AJAX . As chamadas AJAX são um código do lado do cliente que faz solicitações assíncronas. Isso parece complicado, mas simplesmente significa que ele faz uma solicitação para você em segundo plano e depois lida com a resposta. Portanto, quando você faz uma chamada AJAX para algum URL, obtém os mesmos dados que obteria quando um usuário fosse para esse local.
Por exemplo, uma chamada AJAX para 127.0.0.1:8000/hello
retornará a mesma coisa que faria se você a visitasse. Só que desta vez, você a possui dentro de uma função JavaScript e pode lidar com ela da maneira que desejar. Vejamos um caso de uso simples:
$.ajax({
url: '127.0.0.1:8000/hello',
type: 'get', // This is the default though, you don't actually need to always mention it
success: function(data) {
alert(data);
},
failure: function(data) {
alert('Got an error dude');
}
});
O processo geral é este:
- A chamada vai para o URL
127.0.0.1:8000/hello
como se você tivesse aberto uma nova guia e tivesse feito isso sozinho.
- Se for bem-sucedido (código de status 200), execute a função para obter sucesso, o que alertará os dados recebidos.
- Se falhar, execute uma função diferente.
Agora o que aconteceria aqui? Você receberia um alerta com 'olá mundo'. O que acontece se você fizer uma ligação AJAX para casa? A mesma coisa, você receberá um alerta informando <h1>Hello world, welcome to my awesome site</h1>
.
Em outras palavras - não há novidades nas chamadas AJAX. Eles são apenas uma maneira de permitir que o usuário obtenha dados e informações sem sair da página e contribui para um design suave e muito elegante do seu site. Algumas diretrizes que você deve tomar nota:
- Aprenda jQuery . Não posso enfatizar isso o suficiente. Você precisará entender um pouco para saber como lidar com os dados que recebe. Você também precisará entender algumas sintaxes básicas do JavaScript (não muito longe do python, você se acostumará). Eu recomendo fortemente os tutoriais em vídeo da Envato para jQuery , eles são ótimos e colocam você no caminho certo.
- Quando usar o JSON? . Você verá muitos exemplos em que os dados enviados pelas visualizações do Django estão em JSON. Eu não entrei em detalhes sobre isso, porque não é importante como fazê-lo (há muitas explicações em abundância) e muito mais importante quando . E a resposta é: dados JSON são dados serializados. Ou seja, dados que você pode manipular. Como mencionei, uma chamada AJAX buscará a resposta como se o usuário tivesse feito isso sozinho. Agora diga que você não quer mexer com todo o html e, em vez disso, deseja enviar dados (talvez uma lista de objetos). O JSON é bom para isso, porque ele é enviado como um objeto (os dados JSON se parecem com um dicionário python) e você pode iterá-lo ou fazer outra coisa que elimine a necessidade de examinar o html inútil.
- Adicione por último . Quando você cria um aplicativo Web e deseja implementar o AJAX - faça um favor a si mesmo. Primeiro, crie o aplicativo inteiro completamente desprovido de qualquer AJAX. Veja que tudo está funcionando. Então, e somente então, comece a escrever as chamadas AJAX. Esse é um bom processo que ajuda você a aprender muito também.
- Use as ferramentas de desenvolvedor do chrome . Como as chamadas AJAX são feitas em segundo plano, às vezes é muito difícil depurá-las. Você deve usar as ferramentas de desenvolvedor do Chrome (ou ferramentas semelhantes, como o firebug) e outras
console.log
coisas para depurar. Não vou explicar em detalhes, basta pesquisar no Google e descobrir mais sobre isso. Seria muito útil para você.
- Consciência do CSRF . Finalmente, lembre-se de que solicitações de postagem no Django requerem o
csrf_token
. Com chamadas AJAX, muitas vezes você deseja enviar dados sem atualizar a página. Você provavelmente enfrentará alguns problemas antes de finalmente se lembrar disso - espere, esqueceu de enviar o csrf_token
. Esse é um obstáculo conhecido para iniciantes na integração AJAX-Django, mas depois que você aprende como fazê-lo funcionar bem, é fácil.
Isso é tudo que vem à minha cabeça. É um assunto vasto, mas sim, provavelmente não há exemplos suficientes por aí. Apenas trabalhe seu caminho até lá, devagar, você o conseguirá eventualmente.
csrf_token
, podemos contornar esse método? Se tivéssemos uma função de exemploajaxCall()
, podemos simplesmente usar o método tradicional de algo como<form onsubmit='ajaxCall();return false;'>
, certo?Além da excelente resposta do yuvi, gostaria de adicionar um pequeno exemplo específico sobre como lidar com isso no Django (além de qualquer js que será usado). O exemplo usa
AjaxableResponseMixin
e assume um modelo de autor.Fonte: documentação do Django, manipulação de formulários com visualizações baseadas em classe
O link para a versão 1.6 do Django não está mais disponível, atualizado para a versão 1.11
fonte
Estou escrevendo isso porque a resposta aceita é bastante antiga, precisa de uma atualização.
Então é assim que eu integraria o Ajax ao Django em 2019 :) E vamos dar um exemplo real de quando precisaríamos do Ajax: -
Digamos que eu tenho um modelo com nomes de usuário registrados e com a ajuda do Ajax, quero saber se existe um determinado nome de usuário.
html:
ajax:
urls.py:
views.py:
Também render_to_response que está obsoleto e foi substituído pelo render e a partir do Django 1.7 em vez de HttpResponse , usamos JsonResponse para resposta ajax. Como ele vem com um codificador JSON, você não precisa serializar os dados antes de retornar o objeto de resposta, mas
HttpResponse
não é preterido.fonte
Simples e agradável. Você não precisa alterar seus pontos de vista. O Bjax lida com todos os seus links. Confira: Bjax
Uso:
Por fim, inclua isso na CABEÇA do seu html:
Para mais configurações, confira a demonstração aqui: Bjax Demo
fonte
O AJAX é a melhor maneira de executar tarefas assíncronas. Fazer chamadas assíncronas é algo comum em qualquer construção de site. Vamos dar um pequeno exemplo para aprender como podemos implementar o AJAX no Django. Precisamos usar o jQuery para escrever menos javascript.
Este é o exemplo de contato , que é o exemplo mais simples que estou usando para explicar o básico do AJAX e sua implementação no Django. Faremos uma solicitação POST neste exemplo. Estou seguindo um dos exemplos deste post: https://djangopy.org/learn/step-up-guide-to-implement-ajax-in-django
models.py
Vamos primeiro criar o modelo de contato, com detalhes básicos.
forms.py
Crie o formulário para o modelo acima.
views.py
As visualizações parecem semelhantes à visualização de criação baseada em função básica, mas em vez de retornar com renderização, estamos usando a resposta JsonResponse.
urls.py
Vamos criar a rota da vista acima.
modelo
Movendo-se para a seção frontend, renderize o formulário que foi criado acima da tag de formulário anexada, juntamente com o botão csrf_token and submit. Observe que incluímos a biblioteca jquery.
Javascript
Vamos agora falar sobre a parte javascript, no envio do formulário, estamos fazendo uma solicitação ajax do tipo POST, pegando os dados do formulário e enviando para o lado do servidor.
Este é apenas um exemplo básico para começar a usar o AJAX com o django. Se você quiser se aprofundar em vários outros exemplos, poderá seguir este artigo: https://djangopy.org/learn/step-up-guide-to- implement-ajax-in-django
fonte
Eu tentei usar AjaxableResponseMixin no meu projeto, mas acabei com a seguinte mensagem de erro:
Isso ocorre porque o CreateView retornará uma resposta de redirecionamento em vez de retornar um HttpResponse quando você enviar uma solicitação JSON para o navegador. Então, eu fiz algumas alterações no
AjaxableResponseMixin
. Se a solicitação for ajax, ela não chamará osuper.form_valid
método, basta chamarform.save()
diretamente.fonte
Quando usamos o Django:
Se você deseja manter os dados antigos, pode fazê-lo sem o Ajax. (A página será atualizada)
Ou você pode fazer com o Ajax (a página não será atualizada)
Se você usa o Ajax, deve fazer o seguinte:
O Django é diferente do Ajax. A razão para isso é a seguinte:
Na minha opinião, se você gostaria de usar o ajax em qualquer lugar. quando você precisa inicializar uma página com dados primeiro, você pode usar o Django com o Ajax. Mas, em alguns casos, você só precisa de uma página estática sem nada do servidor, não precisa usar o modelo do Django.
Se você não acha que o Ajax é a melhor prática. você pode usar o modelo do Django para fazer tudo, como anime.
(Meu inglês não é bom)
fonte