Interface Admin do Django: um baita quebra-galho.

Já faz algum tempo que nós aqui na Triveos estamos usando Django e Python. Também tenho apresentado palestras e ministrado cursos de Django em vários lugares. Temos até mesmo um curso online de Python e Django à venda em um site desenvolvido em Django.

A Interface Admin do Django
A Interface Admin do Django

Todos os programadores Django adoram falar sobre um dos grandes diferenciais desse framework: A Interface Admin.

Realmente, só quem desenvolve aplicações Web a bastante tempo e perdeu tempo precioso fazendo “telinhas de cadastro” sabe como essa tarefa é chata e pouco desafiadora. E todos que desenvolvem com Django agradecem a existência dessa funcionalidade.

A interface Admin do Django é prática, fácil de ser usada, e bonitinha. Uma mão na roda. Um baita quebra-galho. Até mesmo… mágica! A diferença entre um projeto entregue e um projeto atrasado.

Mas isso termina por aqui.

A interface de Admin do Django tem uma função clara: administrar o sistema. Tanto que ela foi feita para ser acessada só por usuários do “staff“.

Ela foi feita para que os desenvolvedores do site não percam tempo fazendo cadastros “bobinhos” que precisam ser mantidos só pelos funcionários da empresa.

O Django nasceu no mercado editorial e o primeiro projeto desenvolvido nele foi um gerenciador de conteúdo (CMS). A interface de Admin do Django servia (serve?) para que os editores, jornalistas, autores, etc. inserissem conteúdo nos sites dos jornais do grupo The World Company.

A interface Admin não foi feita para você desenvolver toda a sua aplicação nela. Ela é muito poderosa e até faz algumas coisas além de permitir somente a inclusão, visualização, alteração, e exclusão de conteúdo. Ela permite ordenar registros, efetuar buscas, definir ações, etc. Mas paramos por aí.

Funcionalidades mais elaboradas ou que precisam ser acessadas por pessoas que não fazem parte do “staff” continuam tendo o seu desenvolvimento necessário.

No site Ludeos, que foi desenvolvido em Django, a interface Admin ainda é usada para verificar os pagamentos dos cursos, e na manutenção das lojas e produtos. O fato do Django oferecer essa funcionalidade pra gente fez a diferença entre um projeto “atrasado” e um projeto “no ar”.

Mas o uso da interface Admin é um fator limitante para o nosso uso do sistema. Fica claro que, para que o projeto evolua, será necessário tirar algumas dessas funcionalidades da interface de Admin.

Em resumo: usem a interface Admin, mas saibam que em determinado momento ela pode limitar as suas ações e, nestes casos, Django oferece outras alternativas pra te ajudar a deixar a interface Admin: Generic Views. Falaremos sobre elas em outra oportunidade.

Publicado por

Osvaldo Santana

Desenvolvedor Python e Django, Empreendedor, dono de uma motocicleta esportiva, hobbysta de eletrônica, fã de automobilismo e corinthiano

  • E qual é a alternativa? Desenvolver a sua própria interface de administração do zero ou existe algum componente do Django que permite desenvolver em cima, para criar o módulo completo de administração do seu sistema?

  • Eu já passei por problemas de limitação do admin algumas vezes e sempre bate aquela dúvida sobre o que fazer, pois para outras várias funcionalidades o admin serve perfeitamente, mas para algumas poucas eu acabo sentindo a necessidade de criar uma interface a parte. O problema nisso é ter dois lugares distintos para administrar o site, o que eu acho ruim e acabo nunca fazendo.

    Dependendo da necessidade você pode começar redefinindo as funções do admin para se encaixar exatamente com o que você quer e depois migrar do admin padrão do django para a sua própria interface de admin.

  • Programo apenas por hobby, sem experiencia em entregar produtos fico na dúvida quanto a interface admin do Django. Gostaria de usar Django pra fazer um sistema de administração de equipes esportivas (cadastros de jogadores, agenda de partidas, listagem de resultados, etc). Uso o Django Admin para a administração feita pelo usuário final ou faço tudo do zero?

  • Oi Rudá,

    Veja… eu não estou dizendo pra não usar a interface de Admin do Django. Estou apenas avisando é que ela não é 100% flexível e pode limitar o seu raio de ação em determinado momento.

    A interface Admin do Django é altamente personalizável permitindo que você altere templates, modifique funções view e modifique muita coisa do ModelAdmin. Mas o trabalho que isso pode dar pode se tornar maior do que fazer uma “application” especificamente para fazer algo que você precise fazer.

    Exemplo: o motivo de eu ter escrito esse post foi um e-mail que respondi para um cliente da Triveos que queria gerar PDFs de dados de uma detarminada Model. Seria possível fazer isso na interface Django Admin mas o trabalho para implementar isso era razoavelmente maior do que simplesmente criar uma app, mapear uma URL para uma view, retornar o PDF nela e colocar na interface Admin um link para essa URL. Se no futuro ele precisar gerar N+1 formatos de visualização essa app já poderia ser usada.

  • Oi Vinícius,

    Resposta Curta: use Admin até que ela não te atenda mais.

    Resposta Longa:

    Eu tenho algumas perguntas que, se respondidas adequadamente, podem te ajudar na escolha entre essas 2 alternativas:

    1. Esse sistema será usado “internamente” na sua empresa? Se sim: Admin é uma boa opção. Se não: Admin pode ser uma alternativa dependendo da resposta 2.
    2. A parte do sistema que será desenvolvida será usada somente pelos funcionários da sua empresa? Se sim: Admin é uma boa opção. Se não: A interface Admin não deve ser usada.
    3. Você vai precisar fazer muito mais coisas do que simplesmente “cadastro”? Se sim: Admin pode não ser uma boa opção. Se não: use Admin.

  • Oi Yuri,

    Poisé.. Não vejo problemas em ter a manutenção do sistema em 2 partes distintas, até porque elas estão na mesma “app”.. mas apesar de não ver muitos problemas nisso quando eu opto por fazer algo “fora” da interface Admin eu já tiro tudo de lá e uso as Genéric Views pra me ajudar na parte “cadastro” (CRUD) da interface admin.

  • chronosbox

    Hummm, olha, o grande problema que eu tenho tido com o admin é que infelizmente alguns clientes não gostam dele. Hoje o admin está bastante customizável :). Você pode ter views no admin e o método get_urls escrito na sua classe do admin ter permite inclusive escrever o lance do PDF, chamando um étodo generico de outra app. O projeto Grappelli [1] muda razoavelmente a interface do admin, estou começando a usar a pouco tempo mas já gosto das possibilidades.

    O que eu acho que precisamos lutar para ter no admin, é meios de usarmos ele de um modo mais maleável, usando de uma maneira que as views fossem fáceis de customizar. Talvez isso mude com 'class based views'

    1: http://code.google.com/p/django-grappelli/

  • Obrigado pela resposta Osvaldo.

    Não é um produto comercial, quero fazer algo para uso pessoal pensando que no futuro possa ser utilizado também por outras pessoas. O projeto envolve um font-end e um painel de gerenciamento acessível pelo administrador do site, a dúvida é se esse painel de gerenciamento pode ser o admin ou devo cria-lo do zero.

    Vou dar uma olhada em aplicações feitas em Django, como o Satchmo para ver como solucionam isso. Acho que é uma boa comparação, o Satchmo é uma loja virtual feita com Django para qualquer um usar e eu quero fazer um sistema de gerenciamento de equipes esportivas com Django, também para qualquer um baixar e usar.

  • Oi Vinícius,

    Dê uma olhada no Pinax também. Pode ser que você encontre algumas coisas legais por lá também.