Servindo arquivos estáticos no Django em produção com Whitenoise

08/02/2020 - 2 min de leitura

DJANGO

Servir os arquivos estátios no Django as vezes não é um trabalho fácil. Pois o framework não se dá o trabalho de fornecer essa funcionalidade para a gente.

Algumas opções que temos para resolver esse problema, seguindo a documentação oficial do Django, são basicamente:

  • Configurar o nosso servidor web (Apache ou Nginx) para servir esses arquivos;
  • Utilizar serviços de terceiros, como a Amazon S3.

Porém, estou aqui para indicar outro serviço, muito bom por sinal, e que eu particularmente uso em todos os meus projetos, inclusive neste blog: é o WhiteNoise.

WhiteNoise

Esse serviço é simplesmente a coisa mais fantástica e trivial de se usar para que os nossos arquivos estáticos sejam servidos sem dor de cabeça.

Com apenas DUAS linhas de código no settings.py resolvemos o problema, sem depender de serviços da Amazon S3 ou configurar Nginx.

Além do mais, o WhiteNoise serve os arquivos estáticos de forma campactadas com gzip e cuida de adicionar ao cabeçalho da requisição caches desses arquivos, para que sua aplicação não abra mão da performance por estar servindo os arquivos estáticos por ela mesma.

Como usar

Primeiro, com seu virtualenv ativado, precisamos instalar o WhiteNoise utilizando o pip.

pip install whitenoise

Logo após, devemos adicionar a seguinte linha no arquivo de settings.py:

MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',
  # Certifique-se que o WhiteNoise seja adicionado acima de todos os middlewares do Django, exceto o de security. 
  # ...
]

Por fim, para ativar arquivos de cache e com campactação, adicionamos a seguinte linha (eu gosto de adicionar abaixo de STATIC_URL e STATIC_ROOT para manter um padrão):

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Pronto! Agora é só dar um collectstatic e seja feliz sem complicações e estresse para configurar 😚

Compartilhe

Twitter