Imagens com Django e Django Rest Framework¶
Ajustes para usar corretamento imagem com Django e o Django Rest Framework
Imagens com Django¶
Antes de tudo é preciso fazer alguns ajuses na aplicação para utilizar as imagens da maneira correta com o django.
- Adicionar
MEDIA_URL
eMEDIA_ROOT
no arquivo settings.py - Adicionar
MEDIA_URL
eMEDIA_ROOT
nas urlpatterns do arquivo urls.py do project.
Settings.py¶
Adicione as seguinte variáveis de configuração no seu settings:
MEDIA_URL = '/pasta_para_guardar_arquivos/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'pasta_para_guardar_arquivos')
- MEDIA_URL: nome da pasta onde será guardada as imagens, os vídeos e os arquivos que forem feito upload para o repositório.
- MEDIA_ROOT: caminho absoluto para a pasta MEDIA_URL
O seu repositório ficará com a seguinte estrutura
- repositorio
- projeto
- settings.py
...
- app
- models.py
...
- pasta_para_guardar_arquivos
...
- manage.py
Onde pasta_para_guardar_arquivos
será o diretório para armazenar todos os arquivos que forem
feito upload.
Urls.py¶
Concatene com a lista o seguintes comando:
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Veja:
# importa funcao static do django
from django.conf.urls.static import static
# importa as variaveis do arquivo settings.py
from django.conf import settings
urlpatterns = [
path('', views),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# concatena as rotas para acessar as imagens no servidor
Models.py¶
Adicionar campo de imagem ao Model
from django.db import models
class ModelComImagem(models.Model):
imagem = models.ImageField(upload_to='pasta_das_imagens/')
o atributo upload_to
recebe como parâmetro uma string com o nome da pasta de destino. Esta pasta será
localizada dentro da pasta MEDIA_URL
configurada nos settings.py.
Ao salvar uma imagem você terá o seguinte diretório:
- repositorio
- projeto
- settings.py
...
- app
- models.py
...
- pasta_para_guardar_arquivos
- pasta_das_imagens
- imagem1.jpg
...
- manage.py
Já que a string será concatenada com a MEDIA_URL
, é possível criar subdiretórios para upload_to
.
Por exemplo, imagine que sejam imagens de perfil do usuário, você pode fazer da seguinte forma:
from django.db import models
class ModelComImagem(models.Model):
imagem = models.ImageField(upload_to='perfil/pasta_das_imagens/')
Agora, ao salvar você terá o seguinte diretório:
- repositorio
- projeto
- settings.py
...
- app
- models.py
...
- pasta_para_guardar_arquivos
- perfil
- pasta_das_imagens
- imagem1.jpg
...
...
- manage.py