Django no Fim de Semana

por Walter Cruz on 22/05/2007
in Python, Programação, Django

Esse fim de semana eu tirei pra brincar um pouco com o Django. A minha aplicação(?) era totalmente simples: fazer uploads de arquivos e fazer uma listagem dos arquivos enviados, com o upload protegido por senha (ou seja, usuários, e autenticação). Um mini-projeto, muito simples.

Até pensei em fazê-lo em mod_python puro, mas esbarrei num problema: meu apache é 1.3, e o mod_python é o 2.7.2. Para fazer upload de arquivos é preciso aplicar um pequeno hack. Além disso, essa versão do mod_python tem outras idiossincrasias. Por exemplo, com o apache 2, se eu defino uma função index em teste.py, posso chamar teste.py no navegador. Com o apache 1, tem de ser teste.py/index. Outra coisa chata: os métodos no apache 1 devem retornar uma string vazia.

Depois de receber o e-mail do suporte da minha hospedagem, dizendo que eles tinham testado o Django lá e estava funcionando corretamente, parti pro ataque. Meu model tinha uma classe apenas. Resolvi usar a administração do Django ao invés de criar um formulário de upload. Isso também resolveu o problema dos usuários. De resto, usei apenas uma view, para fazer a listagem pública.

Me adiantando à conclusão, posso dizer que a parte mais complicada foi fazer o deploy do projeto. Ao contrário do que dizem todas as recomendações, eu não fiz o deploy num domínio, nem em um subdomínio, mas em um subdiretório de um domínio. O resultado? Horas de dor de cabeça, pesquisas no google e de choramingos com os Djangers mais experientes. De fórum em fórum, caí numa discussão nos grupos do google e consegui fazer funcionar seguindo a receita em nos grupos do google.

Contratempos a parte (e pra ser sincero, eu gosto de um pouco disso. Acabo aprendendo um monte de coisas quanto tenho de resolver um problema), posso resumir dizendo que foi divertido. Alguns pontos:

  • O Django não faz mágica nos models como faz o rails. Eu fiz algumas coisinhas com o rails, e sempre começava pelos bancos, criando as tabelas (seguindo as convenções do rails) e depois eu apenas iniciava o rails, e as coisas estavam ali. Não que eu fizesse certo no rails: o correto seria eu usar migrations. No Django eu precisei criar cada atributo no Model diretamente. Não é doloroso: a partir do model ele gera o banco. Eu gosto mais dessa forma explícita. Pra quem gosta de coisas mais explícitas, para rails, existe um plugin chamado anotate models, que cria os comentários com as colunas que você tem no model. Pesquisando no oráculo, descobri que o Django há um tempo atrás sofreu uma transformação para deixá-lo menos mágico. Gostando ou não (e eu gosto), é assim que é.
  • A ferramenta de administração do Django é MUITO bacana. Inclusive, com a herança dos templates, você pode sobrescrever o template da administração apenas para um objeto que você definiu. Prático assim.
  • Um pequeno bug no Django: na listagem de objetos da administração, é possível usar tanto os campos do objeto como métodos definidos nele. Com os campos, basta clicar no nome do campo para ter a sua listagem ordenada por esse campo. Ao usar métodos, é possível passar um parâmetro dizendo por qual campo do model a coluna representada por nosso método será ordenada na listagem. Porém estava ordenando apenas em ordem ascendente, e não estava mostrando as setinhas indicadoras da ordenação. Um pequeno patch aplicado, e tudo ficou na mais perfeita paz.
  • Para o que precisei, achei a doumentação do Django suficiente. Não sei se é bem completa ou não. Gostei do http://www.djangobook.com/en/beta/ - onde os comentários dos usuários são anexados em cada bloco de texto - e não apenas em uma seção ou capítulo.
  • Um amigo meu criticou o SlugField. Porém, vendo com mais calma, chego a conclusão que é algo que acabamos criando de uma forma ou outra (você sabê, urls legais não mudam e são simples de decorar. O SlugField é uma mão na roda para isso).
  • Fui pego por um erro comum de iniciantes no mapeamento de URLS. Confira, e veja se você não está se batendo com a mesma coisa que eu:)
  • Em casa, quando eu executo o manage.py com o Python 2.5 e acesso uma URL, o servidor despenca.
  • A nomenclatura do Django é um pouco esquisita. Digamos que ele é um framework MTV :)
  • Fiz o deploy usando FastCGI. Deu um certo trabalho. Mas o deploy não funciona com a versão do mod_python que eu tenho no site, então não tenho alternativa.
  • Gostei da idéia dos contenttypes.

Óbvio, meu exemplo foi muito pequeno e muito simples de fazer. Não testei tudo do Django que gostaria de testar. Mas posso dizer que foi um fim de semana muito agradável, deixando até tempo para testar outras coisas.

Endereço de trackback para este post

Trackback URL (clique direito e copie atalho/localização do link)

7 comentários


Notice: Undefined index: comment_secret in /home/walter/repositories/whissip-dev/blogs/inc/comments/model/_comment.class.php on line 161
  1. Ai Walter,

    agora oficialmente você é um djanger!!!

    Bem vindo ao time!

  2. Henrique Email says :

    "Automágica do Rails com os Models" = ActiveRecord.

    Tem gente que pensa que o Rails inventou isso ;)

    []'s

  3. Olá Walter,

    seu blog tem um conteúdo riquíssimo para quem quer programar.

    Irei acompanhar para fazer meus testes.

    Abraços

  4. Walter Cruz (Member) Email says :

    Andrews:

    Pode ser Djangueiro também :)

    ____

    Henrique:

    Tou guardando uns trocos pra comprar o livro do Martin cabeçudo Fowler

    ____

    Victor:

    Valeu pela visita! Precisando, estamos aí :)

  5. grande Walter!

    sobre o SlugField, eu basicamente torço o nariz para a função slugify, do django.templates.defaultfilters, porque ela não suporta bem caracteres especiais.

    acabou que eu fiz meu proprio slugify, que troca caracteres especiais por normais e tudo fica bem :)

  6. Wilton Email says :

    Olá Walter,
    você disse o seu site de hospedagem tem o Django disponível.

    É possivel você me informar qual é o site? Estou procurando um para hospedar uma aplicação em Django...

    []s
    Wilton

  7. Walter Cruz (Member) Email says :

    Olá Wilton! Desculpe a demora. Tem sim, disponível via fastcgi. Está hospedado na auriance.

Share Your Thoughts


Seu endereço de e-mail não será revelado nesse site.

Sua URL será exibida.
PobreExcelente
(Quebras de linha se tornam <br />)
(Nome, e-mail & website)
(Permitir que usuários o contatem através de um formulário eletrônico (seu e-mail não será exibido.))
Subscribe to comments by email

You can just use your OpenID to provide your name, e-mail and url.