5. Usuario urls.py
views.py Templates
index( )
cadastro( ) Arquivos
listar( ) Estáticos
Banco de
models.py
Dados
6. Servindo Arquivos
Estáticos
• Arquivos estáticos (ou de mídia):
• css, js, imagens (jpg, gif, png, etc);
• Como fazer ?
• Dizer qual o diretório em settings.py;
• Ativar a aplicação “static serve” no
arquivo urls.py.
7. Definindo o diretório
de mídia
• No arquivo settings.py encontre as linhas onde estão a
varíaveis MEDIA_ROOT e MEDIA_URL;
• Atribua um valor à variável MEDIA_ROOT com o
caminho absoluto onde estão os seus arquivos
estáticos:
• MEDIA_ROOT = 'C:/temp/media'
• Atribua um valor à variável MEDIA_URL com a URL
que você quer usar para acessar os seus arquivos:
• MEDIA_URL = '/arquivos/'
8. Ativando o static serve
• No arquivo urls.py adicione o seguinte import:
• from django.conf import settings
• E a seguinte definição:
• (r'^arquivos/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT}),
Atenção: Este padrão de URL deve obedecer o valor da variável MEDIA_URL
9. Testando
• Modifique a sua aplicação:
• Defina um diretório de mídia;
• Adicione alguns arquivos dentro;
• Inicie o servidor (de dentro do diretório onde está o
arquivo manage.py do seu projeto):
• python manage.py runserver
• Teste:
• http://localhost:8000/arquivos/foto.jpg
10. Fazendo upload de
arquivos
• Django possui dois tipos de dados que
podem ser utilizados para manipular
arquivos:
• models.FileField;
• models.ImageField.
11. Exemplo
• Vamos supor que as nossas notícias agora
tenham imagens:
class Noticia(models.Model):
jornalista = models.ForeignKey(Jornalista)
categoria = models.ForeignKey(Categoria)
titulo = models.CharField(max_length=200)
texto = models.TextField()
data_publicacao = models.DateTimeField()
foto = models.ImageField(upload_to="fotos")
def __unicode__(self):
return self.titulo
13. Testando
• Para testar apague o arquivo do banco de
dados (meusite.db) e em seguida sincronize
o banco de dados;
• Em seguida inicie o servidor:
• python manage.py runserver
14. Por quê a separação ?
• Arquivos estáticos (mídia) e templates são
separados por razões de segurança;
• Você pode até definir o TEMPLATE_DIRS e
o MEDIA_ROOT para o mesmo diretório,
porém, assim você estará permitindo que
usuários consigam ver o conteúdo dos seus
templates.
15. Formulários
• O nosso cliente pediu para que
permitíssemos aos usuários do nosso site
comentar as notícias;
• Para isto iremos criar uma nova entidade,
Comentario, e vamos adicionar um
formulário no detalhe da notícia.
16. Classe Comentario
• No arquivo models.py:
class Comentario(models.Model):
noticia = models.ForeignKey(Noticia)
comentario = models.TextField()
def __unicode__(self):
return self.comentario
21. GET x POST
• Existem duas formas de passar parâmetros
de um formulário HTML:
• GET - Parâmetros passados através de
URL;
• POST - Parâmetros passados através de
um fluxo de entrada e saída entre o
navegador e o servidor.
22. GET x POST
• O método GET apresenta problemas de
privacidade e tem uma limitação de até 256
caracteres (limite do tamanho da URL).
23. Modificando o nosso
formulário para usar POST
• Django acrescenta algumas verificações de
segurança para utilização de formulários
POST;
• Isto evita que usuário maliciosos enviem
dados indevidos para as nossas aplicações.
26. Desafio
• Adicione os campos autor e data de
publicação aos comentários;
• Exiba os comentários ordenados pela data
de publicação em ordem inversa;
• Dica:
• models.DateTimeField(auto_now=True)
27. models.py
class Comentario(models.Model):
noticia = models.ForeignKey(Noticia)
autor = models.CharField(max_length=100)
data_publicacao = models.DateTimeField(auto_now=True)
comentario = models.TextField()
def __unicode__(self):
return self.comentario
30. Formatos de
data e hora
• Visitem a página:
• http://docs.djangoproject.com/en/dev/ref/
templates/builtins/
• Procurem por Available format strings;
• Tem uma lista imensa de formatos de data
e hora que podem ser utilizados.
31. Desafio
• Utilizem os conceitos aprendidos e implementem
um blog;
• Dica:
• http://pypi.python.org/pypi/django-tinymce/