Exemplo em Django – parte 5

django-5_abertura.png

Prosseguido com o desenvolvimento do “Agenda de Eventos”, na quarta parte foram incluídas as opções de inserção, edição e remoção dos eventos e que, em tese, concluiu todas as funcionalidades da aplicação.

Para esta parte, algo mais leve, com a configuração de idioma e fuso horário do Django (válido tanto para a aplicação quanto para a interface administrativa), a customização da interface de administração e, claro, a colocação de algum conteúdo na página principal.

Antes de começar…

Lembrando que as alterações já estão disponíveis no repositório do projeto no GitHub, então basta atualizá-lo antes de prosseguir.

$ git pull
...

Aliás, estes são os arquivos alterados ou incluídos no repositório desde a parte anterior.

$ git diff parte-4..parte-5 --name-only
Agenda/settings.py
events/admin.py
events/static/all.png
events/static/favicon.png
events/static/new.png
events/static/style.css
events/static/today.png
events/templates/index.html
events/templates/new.html
events/views.py

Como cada parte tem sua tag, é possível visitar uma versão específica a partir de git checkout parte-«número», para consultar o código, ramificar a partir daquele ponto ou, como fiz acima, mostrar quais os arquivos alterados entre elas.

Localização

django-5_localizado

Algo interessante a ser feito é acertar as configurações de idioma e de fuso horário do Django. Por padrão ele vem configurado em inglês dos Estados Unidos e no fuso horário do meridiano de Greenwich (UTC ou GMT).

Para isto, basta editar os seguintes valores no arquivo “./Agenda/settings.py”:

...
LANGUAGE_CODE = 'pt-BR'
TIME_ZONE = 'America/Sao_Paulo'
...

Neste caso alterando o idioma (“LANGUAGE_CODE”) para português brasileiro e fuso horário (“TIME_ZONE”) para o da região sudeste¹.

Maiores detalhes sobre os valores permitidos estão disponíveis na documentação do Django e tanto a aplicação em si passará a utilizar valores específicos de localidade como também o idioma padrão da interface de administração mudará.

Especificamente com relação às opções de internacionalização da aplicação em si, continuam valendo as regras do Python com GNU Gettext e todo o resto… 🙂

(¹) Na verdade é o fuso horário padrão para os estados de Goiás, Minas Gerais, Espírito Santo, Rio de Janeiro, São Paulo, Paraná, Santa Catarina, Rio Grande do Sul e o Distrito Federal, os estados que tem horário de verão e não necessariamente apenas a região sudeste 🙂

Interface de Administração

django-5_evento_admin

Uma boa ideia seria deixar a interface de administração com mais recursos, então, ao invés de registrar em “./events/admin.py” o modelo Event com:

admin.site.register(Event)

Usa-se um decorator para customizar alguns parâmetros utilizados:

...
@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
    list_display = ("date", "event", "priority", )
    list_display_links = ("event", )
    list_filter = ("date", "priority", )
    list_editable = ("priority", )
    search_fields = ("event", "date", )

Na ordem:

  • list_display” : Ao invés de usar o conteúdo de __str__() da classe Event, serão utilizados os campos de data, descrição e prioridade do evento (na ordem);
  • list_display_links” : O link para registro ficará apenas no campo da descrição do evento;
  • list_filter” : Permitirá que se filtre a listagem a partir dos campos de data e de prioridade do evento. O tipo dos dados será reconhecido, habilitando na filtragem da data opções como hoje, últimos 7 dias, este mês etc enquanto que prioridade usará os valores definidos lá no modelo;
  • list_editable” : Tornará a prioridade editável diretamente na listagem e
  • search_fields” : Permitirá a pesquisa dentro dos campos na data e também na descrição do evento.

Maiores informações sobre o que pode ser customizado na “decoração” do register() estão disponíveis na documentação da classe django.admin.

Página Principal

A página principal tinha ficado um tanto quanto vazia, então ela ganhou uma imagem de fundo do meu estoque particular, ícones para as opções, uma versão melhorada do “./events/static/favicon.png” e, claro, o “./events/static/style.css”. Já que uma das opções da página principal é justamente a inclusão de novo evento o botão que faz a mesma coisa no final da página ficou redundante.

Assim o gabarito “./events/template/new.html” ganha uma condição para permitir que o botão seja desligado sempre que necessário:

{% if hide_new_button != True %}
    ... Novo Evento ...
{% endif %}

E este atributo, o ‘hide_new_button’, só precisa ser incluído dentro do contexto de index(), a visão responsável pela página principal:

def index(request):
    context = {
        ...    
        'hide_new_button': True,
    }
    return render(request, 'index.html', context)

Assim não é necessário alterar o contexto das outras visões.

Fim desta parte

Por enquanto é só, neste ponto o “Agenda de Eventos” já tem todas as suas funções como também uma opção de administração dos eventos cadastrados bem mais funcional, na derradeira última parte (será?) um pouco de customização com a inclusão de um novo recurso, a opção de comentários dentro dos eventos.

Até!

Anúncios

Um comentário sobre “Exemplo em Django – parte 5

  1. Pingback: Exemplo em Django – parte 6 | giovannireisnunes

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s