Posts Tagged ‘Python’

Auto-complete com Django e JQuery UI

sexta-feira, agosto 19th, 2011

Auto-complete é aquele recurso usado por alguns sites, onde ao digitar alguma coisa em uma caixa de texto, aparecem sugestões que coincidam com os caracteres digitados, bastando clicar para selecionar a opção desejada. É algo que facilita a vida do usuário e também reduz o tráfego de informações entre a aplicação e o banco de dados, o que hoje em dia é algo que vale muito a pena considerar.

Vou apresentar como fazer isso usando o framework Django e a JQuery UI. É necessário um conhecimento básico prévio de Django, pois não vou mostrar todas as etapas da criação da aplicação.

Antes de qualquer coisa, adicione as referências para a JQuery e JQuery UI na página do auto-complete. É recomendável utilizar o CDN do Google, conforme indica na própria página do JQuery UI:

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css" type="text/css" media="all" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js" type="text/javascript"></script>

Em primeiro lugar, o exemplo de um model que vamos usar, bem simples para focar na didática:

class Livro(models.Model):
	nome = models.CharField(max_length=100, null=False)
 
	def __unicode__(self):
		return self.nome

Uma simples classe Livro com um campo nome.

Agora, a view que responderá as requisições Ajax. Ela vai receber os caracteres digitados pelo usuário, efetuará uma busca no banco de dados, vai formatar os dados para o auto-complete e devolver a resposta para a requisição Ajax no formato JSON:

from django.http import HttpResponse
from django.utils import simplejson
 
def busca_autocomplete(request):
	busca = request.GET['term']
	livros = Livro.objects.filter(livro__istartswith=busca)
	res = [ dict(id=l.id, label=l.__unicode__(), value=l.__unicode__()) for l in livros ]
 
	return HttpResponse(simplejson.dumps(res), mimetype="application/x-javascript")

Criada a view, é necessário configurar a url para ela, no arquivo urls.py:

(r'^livros/$', 'seu_projeto.sua_aplicacao.views.busca_autocomplete')

A view que criamos logo acima será acionada quando o browser solicitar a url /livros/.

E finalmente, o código Javascript que vai configurar o auto-complete. Ele deve ser colocado na página onde está o campo texto que o usuário vai digitar a informação e, conforme ele for digitando, o auto-complete vai apresentar sugestões baseadas no que ele digitou. Vamos considerar que o id do campo texto será “texto”.

$(function() {
	$( "#texto" ).autocomplete({
		source: "/livros/",
		minLength: 3,
		select: function( event, ui ) {
			alert("ID: " + ui.item.id);
		}
 
	});

Explicando resumidamente… o parâmetro source informa a URL que vai responder à requisição, o parâmetro minLength indica o número mínimo de caracteres que o usuário deverá digitar para acionar o auto-complete e o parâmetro select é a rotina que vai tratar o evento de seleção de uma opção do auto-complete (no nosso caso, exibir um alert com o ID do livro).

É hora de aprender uma nova linguagem! Escolhida: Python

segunda-feira, janeiro 31st, 2011

PythonSabe aquela velha máxima que diz que um programador deve aprender uma nova linguagem por ano? Pois então, resolvi botar a mão na massa e seguir esta regra. Mas aí vem a pergunta: qual linguagem aprender?? Para decidir, enumerei alguns requisitos: ser orientada a objetos e também funcional, sintaxe simples mas com bastante recursos, comunidade vasta e ativa e ser adequada para desenvolvimento web. De imediato selecionei Ruby, Python e Scala, mas logo excluí Scala da lista, pelo fato de ser uma linguagem bem mais recente e por isso sua comunidade ainda é menor que Ruby e Python. Entretanto, é uma linguagem que promete muito, talvez ano que vem.

Aí começou o dilema… Ruby ou Python? Ambas as linguagens atendem perfeitamente os requisitos que eu coloquei, mas a escolha por Python foi mais pela maturidade da linguagem e também por um framework web que me interessou bastante: Django. É incrível a simplicidade e a objetividade do framework Django, com muito pouco tempo é possível desenvolver uma aplicação simples, como um blog, por exemplo. Além disso, há uma infinidade de aplicações e bibliotecas prontas, o que torna a produtividade ainda maior.

Para quem procura uma linguagem simples, Python é perfeita. Ela consegue aliar simplicidade com uma gama de recursos comparável a linguagens como C/C++ e Java. Para quem possui experiência em C, é possível criar extensões para Python. Há também uma variante de Python que executa na máquina virtual Java, chamada Jython. Ideal quando a aplicação Python necessita usar rotinas em Java. Precisa desenvolver aplicações para desktop? Sim, é possível… WxWindows, GTK, Qt, Tk, etc, é só escolher. Para a web, além do Django, existem vários outros frameworks, como TurboGears, Pylons, Web2Py, etc. O próprio Google escolheu Python como a primeira linguagem para o desenvolvimento de aplicações para a sua plataforma de cloud computing, Google App Engine.

Resumindo, estou aprendendo, mas estou gostando muito de Python. É o tipo de linguagem que a gente fica se perguntando porque não aprendeu antes.