Vamos ao quinto artigo sobre Django? Se você ainda não leu os últimos artigos, confira aqui:
- Web em Python - Django - Parte 1
- Web em Python - Django - Parte 2
- Web em Python - Django - Parte 3
- Web em Python - Django - Parte 4
Inicialmente, vamos melhorar a nossa classe de modelo. Vamos adicionar parâmetros para o campos da publicação para este pegar o momento da publicação automaticamente, e vamos alterar para que as publicações sejam exibidas da mais recente para a mais antiga.
Veja bem como fica nossa classe de modelo após estas alterações:
from django.db import models
from datetime import datetime
class Artigo(models.Model):
class Meta:
ordering = ('-publicacao',)
titulo = models.CharField(max_length=100)
conteudo = models.TextField()
publicacao = models.DateTimeField(default=datetime.now, blank=True)
Adicionamos o import para datetime, criamos uma classe interna de metadados do nosso modelo, onde indicamos que artigos serão ordenados por ordem inversa de publicação (por isto o sinal de -) e colocamos os parâmetros default=datetime.now e blank=True no atributo da publicação, respectivamente para dizer que o horário padrão da publicação será o da criação do artigo.
Agora, vamos configurar a url para acessar nossos artigos. Altere o arquivo urls.py que está dentro do diretório do seu projeto (o mesmo diretório onde está o arquivo settings.py).
Observe as alterações que foram feitas:
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
from django.views.generic import ArchiveIndexView
from meublog.models import Artigo
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'TesteProgrameemPython.views.home', name='home'),
# url(r'^TesteProgrameemPython/', include('TesteProgrameemPython.foo.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
url(r'^$', ArchiveIndexView.as_view(model=Artigo, date_field='publicacao'))
)
Acrescentamos aqui a última configuração de url. O primeiro parâmetro é uma expressão regular que irá filtrar quais urls devem ser traradas pela view que vem em seguida. Neste caso, a expressão regular '^$' indica que a raiz do site será gerenciada por esta view. Depois, usamos uma view genérica do Django que já trata a exibição de publicações ordenadas por tempo. Para esta view, passamos qual o modelo que será exibido, no caso, nossa classe Artigo, e especificamos qual o atributo de data do modelo.
Seu projeto Django já sabe tratar então os acessos à raiz do site, mas ainda não temos uma página html para renderizar seu conteúdo!
Vamos então criar um diretório templates no diretório meublog, onde temos o models.py, por exemplo. Dentro do diretório templates, criamos um diretório meublog, e dentro dele um arquivo chamado artigo_archive.html.
O nome artigo_archive é um nome padrão para esta view genérica. artigo por causa do modelo que será renderizado e archive por ser uma view archive.
Dentro do arquivo, coloque o seguinte conteúdo:
<html>
<body>
<h1>Meu blog</h1>
{% for artigo in latest %}
<h2>{{ artigo.titulo }}</h2>
{{ artigo.conteudo }}
{% endfor %}
</body>
</html>
Reparou que usamos tags diferentes das tags HTML comuns? Estas são tags Django!
Tags como {{ artigo.titulo }} são tags para acessar atributos dos objetos carregados na tela. Já tags como {% for artigo in latest %} são tags de controle, temos {% for %}, {% if %}, entre outras, e além disto, podemos criar nossas próprias tags.
Vamos ver o resultado?
Levante o servidor e veja no seu browser!
python manage.py runserver
Acesse http://localhost:8000
E aí? Gostaram? Fácil?
Ficamos por aqui com o Django. Pretendo me aprofundar mais no assunto futuramente, mas como ainda temos outros frameworks para tratar, acho que esta base já é suficiente para vocês começarem a criar seus próprios projetos em Django!
Semana que vem falamos de Flask!
Não se esqueçam de deixar opiniões e sugestões nos comentários!
Muito obrigado!
Abraços e até o próximo artigo!


Muito bacana essa série sobre desenvolvimento web, Julio! Certamente é um dos pontos nos quais os iniciantes em Python que vêm de outras linguagens mais têm dúvidas. Como sugestão futura, seria interessante tratar da parte de deploy das aplicações no Apache, nginx etc. Parabéns pelo blog!
ResponderExcluirOpa, muito obrigado Rodrigo!
ExcluirAinda quero fazer as postagens sobre flask e outros frameworks, mas está difícil ter tempo.
Abraço!