Criando novas views para o admin

25, janeiro, 2010 Sem comentários

Um bom tempo sem postar nada novo… porém estou de volta com uma dica simples que já usei bastante.

Quem utiliza o Django com certeza adora a app admin que o acompanha, nós desenvolvedores ganhamos de presente uma administração de sites útil para praticamente qualquer site, e diga-se de passagem as administrações são sempre as partes mais chatas quando se produz um site.

Como nem tudo é perfeito, quando é necessário customizar o admin temos diversas opções, porém essa não é a intenção desse post. Quem quiser saber mais detalhes sobre customização do admin pode acessar a documentação do django e essa página da IBM.

O nosso caso é diferente, existem situações em que precisamos criar novas funcionalidades específicas para a administracao (não estão relacionadas a nenhum model), mantendo o layout e as restrições de acesso.

O primeiro passo é criar a view:

from django.shortcuts import render_to_response
from django.template import RequestContext

def minha_view(request):
    #executa alguma funcionalidade
    return render_to_response('app/minha_view.html',locals(),request_instance=RequestContext(request))

Note que a view acima é igual a qualquer outra que se faz normalmente.
Em seguida definimos uma url para nossa view:

urlpatterns = patterns('',
    (r'^admin/admin_view','app.views.minha_view'),
    (r'^admin/', include(admin.site.urls)),
)

Eu preciso definir a minha url antes da url do admin, se ela for colocada após o admin a view não é encontrada. Cuidado para não sobrepor nenhuma view já existente do admin.

Agora criamos o template minha_view.html:

{% extends 'admin/base_site.html' %}
{% block content %}
Aqui ficarão os dados da sua view
{% endblock %}

O template acima é muito simples, caso queira fazer algo mais sofisticado (como css, breadcrumbs e forms) sugiro olhar os templates padrões do admin. Eles podem ser encontrados em: %DJANGO_DIR%/contrib/admin/templates/admin.

Pronto, sua view já possui a ‘cara’ do admin. Porém ela pode ser acessada por qualquer usuário, até mesmo os logados.

O passo natural seria usar o decorator login_required para exigir o login, so que por algum motivo desconhecido os redirecionamentos do admin não combinam muito bem com views externas. Nesso caso a solução é transformar a nossa view numa view do admin, para isso editamos o urls.py:

from django.contrib import admin
from app.views import minha_view

urlpatterns = patterns('',
    (r'^admin/admin_view',admin.site.admin_view(minha_view),
    (r'^admin/', include(admin.site.urls)),
)

Pronto sua view está protegida de acessos anônimos e todos os redirecionamentos funcionam corretamente.
Agora é só criar suas novas funcionalidades embutidas diretamente no admin.

Espero ter ajudado. Até a próxima.

Categories: django, python Tags: , ,

Um pouco de metaprogramação

1, outubro, 2009 Sem comentários

Quem assina a lista django-brasil recebeu essa mensagem do Luciano Ramalho sobre metaprogramação. Achei muito interressante e demonstra perfeitamente o quão poderosa é a linguagem Python.

Estou reproduzindo o texto sem alterações:

Em geral não é tedioso programar com o Django, mas às vezes é, veja só quanta repetição:

# http://pastebin.com/f2fc7b238

class DescriptorInline(admin.TabularInline):
   model = Descriptor

class RecruitmentCountryInline(admin.TabularInline):
   model = RecruitmentCountry

class OutcomeInline(admin.StackedInline):

   model = Outcome

class TrialInterventionCodeInline(admin.TabularInline):

   model = TrialInterventionCode

class SecondaryNumberInline(admin.TabularInline):

   model = TrialNumber

class TrialContactInline(admin.TabularInline):

   model = TrialContact

class TrialInstitutionInline(admin.TabularInline):

   model = TrialInstitution

class ClinicalTrialAdmin(admin.ModelAdmin):

   inlines = [SecondaryNumberInline, RecruitmentCountryInline,

              OutcomeInline, TrialContactInline, TrialInstitutionInline,

              DescriptorInline, TrialInterventionCodeInline]

No código acima, cada nome de modelo aparece três vezes… (uma vez ao
declarar a classe XXXInline, no atributo model do inline, e mais uma
vez no atributo inlines).

Além disso, quase todas as declarações de inlines são idênticas… E o
princípio DRY, como fica?

Felizmente Django é Python. Então aquilo pode ser reescrito de uma
maneira mais legal assim:

# http://pastebin.com/f5af2bd28

tabular_inline_models = [Descriptor, RecruitmentCountry, TrialInterventionCode,

                        TrialNumber, TrialContact, TrialInstitution]

tabular_inlines = []

for model in tabular_inline_models:

   cls_name = model.__name__+'Inline'

   cls = type(cls_name, (admin.TabularInline,), {'model':model})

   tabular_inlines.append(cls)

class OutcomeInline(admin.StackedInline):

   model = Outcome

class ClinicalTrialAdmin(admin.ModelAdmin):

   inlines = tabular_inlines + [OutcomeInline]

O truque aqui foi usar a função type(), que pode ser usada para criar
classes dinamicamente. Para isso a gente passa três argumentos para a
função type():

- uma string que será o __name__ da classe
- uma tupla de super-classes (importante: a vírgula dentro do
parêntesis indica que é uma tupla de um elemento)
- um dicionário com os atributos da classe (métodos e variáveis)

Não tente fazer isso em Java ;-) .

[ ]s
Luciano

IV Encontro do GruPy-AL

1, agosto, 2009 Sem comentários

Para quem não sabe faço parte do GruPy-Al. Um grupo de desenvolvedores python do estado de Alagoas. Tudo bem que ainda não é uma participação muito ativa, mas pretendo mudar isso ai.

Quinta-feira aconteceu o IV Encontro, no auditório da IFAL (antigo CEFET), com a presença de 84 participantes, até agora o encontro com o maior número de participantes. Tudo bem que boa parte do pessoal eram alunos do IFAL, mas isso não vem ao caso.

Foram 3 palestras, uma sobre o wiki Moin Moin, uma sobre BRisa e outra sobre BRiGas.

Quem quiser saber mais detalhes sobre o grupo pode acessar a lista de discussão:

http://groups.google.com/group/grupy-al

Ou então acessar o blog:

http://grupyal.blogspot.com/

Categories: eventos, python Tags: ,

Templates em PHP, só se for com PHPTAL

19, julho, 2009 2 comentários

Para quem ainda usa PHP, ou não tem outra alternativa mais legal como Ruby on Rails ou Python/Django… segue uma dica de uma ferramenta de templates muito legal!

O PHPTAL é um motor de geração de templates para PHP5 que implementa a sintaxe ZPT (Zope Page Templates) ex.:

<div class="item" tal:repeat="item itemsArray">
    <span tal:condition="item/hasDate" tal:replace="item/getDate"/>
    <a href="${item/getUrl}" tal:content="item/getTitle"/>
  <p tal:content="value/getContent"/>
</div>

Enquanto a maioria dos desenvolvedores continua a usar tags ASP/JSP/PHP como principal linguagem para seus templates, a comunidade Zope teve a ótima idéia chamada TAL. A idéia era mover a ações para dentro de atributos XHML ao invés de usar outras tags e elementos.

Essa é grande vantagem da sintaxe do ZPT, sua simplicidade, não existem novas tags para aprender, e sim novos atributos que podem ser adicionados a qualquer tag XHTML e que atribuem comportamentos específicos. Esses novos atributos possibilitam ações como: condição, definição, repetição, inclusão de attributos, substituição de conteúdo, entre outros.

No exemplo disponível no site do projeto podemos ver o equivalente ao código acima:

<?php foreach ($values as $value): ?>
<div class="item">
  <div class="title">
    <?php if ($value->hasDate()): ?><?=$value->getDate()?><?php endif; ?>
    <a href="<?= $value->getUrl() ?>"><?=
		htmlentities($value->getTitle())
	?></a>
  </div>
  <div class="content">
    <?= htmlentities($value->getContent()) ?>
  </div>
</div>
<?php endforeach; ?>

Nota-se a economia de código fonte que o PHPTAL oferece.

Outra grande vantagem so PHPTAL é que, o tamplates são compilados para código fonte PHP5. Funcionando semelhante a idéia de bytecode em python, onde o código fonte em PHPTAL é compilado para PHP na primeira vez em que for executado, sendo o mesmo somente gerado novamente se o código fonte for alterado.

Abaixo a lista funcionalidades do PHPTAL

  • separação da lógica e apresentação,
  • avisa se você esquecer de fechar uma tag ou se tem erros no template
  • templates limpos e legíveis,
  • fácil integração com editores HTML WYSIWYG,
  • abstração de dados usando um sistema similar a XPath,
  • interessante sistema de macros HTML,
  • sistema de internacionalização integrado (usando gettext),
  • habilidade de substituir expressões XPath por expressões PHP,
  • quase nenhuma perda de velocidade (templates são compilados, grandes expressões podem ser substituídas por código PHP,
  • compatível com aceleradores PHP,
  • mais de quatro anos de suporte da comunidade ZPT,
  • código extensível.

Bom, segue ai a dica para quem quiser um motor de templates interessante e fácil de aprender.
Mais detalhes no site do projeto: http://phptal.org

Até a próxima.

Categories: php Tags: , , , ,

FISL 10 foi mara!

8, julho, 2009 Sem comentários

Bom, já passou uma semana do FISL10, foi uma semana muito corrida em POA, entre palestras, feira de tecnologia, saídas a noite, ida ao Beira Rio, etc….. Com tudo isso não deu para atualizar o blog. Mas agora estou de volta ao calor de Maceió e aqui estão minhas impressões da décima edição do Fórum Internacional de Software Livre.

FISL 10

FISL 10 - Multidão

Pra comecar vale dizer que tinha MUITA gente no evento, 7 mil pessoas num so lugar é um pouco claustrofóbico, porém não faltaram atividades para todos durante os 4 dias de evento.

Tinhamos representantes de várias áreas no suporte a causa do Software Livre, como: Free Software Foundation, Mozilla, Ubuntu-br, Fedora, Sun, Oracle, Associação Python Brasil, Globo.com e vários outros.

Muitos brindes! Vai a dica a que se aventurar nas próximas edições do FISL, gaste as primeiras horas do dia inicial para “caçar” os brindes. Eles têm de tudo, camisas, adesivos, cds. Nem sempre é de graça, a Mozilla, por exemplo, estava distribuindo camisetas a quem achasse pistas escondidas no galpão da PUC. No último caso pode-se comprar algumas lembraças, mas é bom correr também pois acabam rápido.

As palestras estavam pouas, porém é tanta coisa acontecendo ao mesmo tempo que fica dicifil acompanhar as quem você quer assistir, precisa-se de um pouco de prática. Da proxima vez estarei mais esperto.

Ainda teve a visita do lula, que eu não vi…. mas foi muito importante para a causa Software Livre o apoio do Goveno Federal.

No final das contas o FISL vale muito a pena, quem tiver a oportunidade de ir não vai se arrepender. Abaixo tem algumas fotos que tirei no evento.

Jogo da Mente

Jogo da Mente

Não entendi muito, mas achei legal!

PLACAS

Richard Stallman

Richard Stallman

CAIXA

CAIXA

Credenciamento

Credenciamento

SERPRO

SERPRO

Bolinhas da SUN

Bolinhas da SUN

Categories: eventos Tags: , , , , ,

Chegamos em POA

23, junho, 2009 Sem comentários

Depois de um vôo meio turbulento pousamos em POA agora a noite. Muita chuva e frio nessa noite de terça feira. Amanhã começa o FISL.

Em breve as fotos!!

Categories: eventos Tags: ,

Guia de Sobrevivência Urbana: Fórum Internacional de Software Livre

20, junho, 2009 Sem comentários

Vi esse post e achei muito interressante para quem vai para o FISL!

“Na próxima Quarta-Feira inicia a 10a. edição do Fórum Internacional de Software Livre (FISL), o maior evento de software livre do Brasil. Pensando nos milhares de brasileiros que virão para a capital gaúcha, muitos pela primeira vez, criei este “guia” que com bom humor da várias dicas para o evento e estadia em Porto Alegre.” [referência: incerteza.org]

Categories: Sem categoria Tags:

Rumo ao FISL

16, junho, 2009 Sem comentários

Passagem comprada, hotel reservado e inscrição confirmada. Agora só falta chegar lá em POA.

Estou indo pela primeria vez participar do evento que considerado a Meca do desenvolvimento de software livre. Com presenças confirmadas de Richard Stallman, Peter Sunde Kolmisoppi (The Pirate Bay), Jon “Maddog” Hall e vários outros entusiastas do software livre do Brasil e do mundo.

Quem quiser ir ainda da tempo, pois as inscrições pelo site acabam dia 18 e a as passagens de avião estão em conta. Essa 10ª edição do FISL promete bastante, em breve muitas fotos do evento.

Categories: eventos Tags: ,

Saiu o Ubuntu 9.04

23, abril, 2009 Sem comentários

A partir de hoje já esta disponível para download a versão 9.04 do Ubuntu. Apelidada de Jaunty Jackalope, a nova versão atualiza grande parte dos pacotes a 8.10 e traz novidades interessantes, entre elas estão:

  • Gnome 2.26
  • Brasero 2.26.0
  • Melhor manuseio de múltiplos monitores
  • X.org server 1.6
  • Novo estilo para notificações
  • Kernel 2.6.28
  • Suporte a Ext4

Para fazer o download acesse o site http://www.ubuntu.com e clique em “Get Ubuntu”, ou então clique aqui.

Nesse momento estou atualizando o meu desktop do trabalho, são exatos 1359 arquivos para baixar, e como hoje a conexão não é das melhores, depois que terminar a atualização posto mais detalhes sobre o que eu achei.

Mais informações sobre as novidades da versão 9.04 acesse: https://wiki.ubuntu.com/JauntyJackalope/TechnicalOverview

Categories: sistemas, ubuntu Tags: , ,

Alagoas Digital

1, abril, 2009 Sem comentários

Semana que vem tem início o Alagoas Digital, um evento de grande porte de tecnologia no Estado de Alagoas. Num esforço conjunto do ITEC com várias secretarias do estado alagoano, o evento reunirá grandes nomes como Silvio Meira e Henrique Miorelli.

Nos dias 6 e 7 de abril, estarei ministrando, ao lado de Carlos Jean, um mini-curso sobre Desenvolvimento Web em ambinete Zope/Plone. Será um mini-curso básico onde mostraremos entre outras coisas o uso do ArchGenXML para criação rápida de produtos Plone.

Mais informações sobre o Alagoas Digital acesse: http://www.alagoasdigital.com.br

Alagoas Digital