Arquivos estáticos do Django … pegando o unicórnio

Qualquer pessoa que já trabalhou com Django entende a dor de cabeça que são os arquivos estáticos. Embora o staticfilespacote integrado seja ótimo, ele não funciona bem com CDNs como o S3 da Amazon. Depois de muito pouca escavação, pode-se encontrar django-storages, mas a documentação é severamente insuficiente. Espero que isso ajude.

Nota: Presumo que você já esteja operando em um ambiente virtual.

Passos

Se você seguir essas seis etapas, estará servindo arquivos estáticos como um profissional!

Passo 1

Baixar django-storages:

$ pip install django-storages boto

Passo 2

Adicione storagesaos seus aplicativos instalados em settings.py.

INSTALLED_APPS = (
...
'storages',
...
)

etapa 3

Obtenha suas credenciais de segurança da AWS . Você precisará do ACCESS_KEY_IDe do SECRET_ACCESS_KEY. Salve-os para a Etapa 4.

Passo 4

Adicione as seguintes variáveis ​​ao seu :settings.py

AWS_ACCESS_KEY_ID = 'your-access-key-id-from-step-3'
AWS_SECRET_ACCESS_KEY
= 'your-secret-access-key-from-step-3'
SITE_ROOT
= os.path.dirname(os.path.realpath(__file__))

E modifique as seguintes variáveis ​​em :settings.py

STATIC_ROOT = os.path.join(SITE_ROOT, 'local_static')
STATICFILES_DIRS
= (
os
.path.join(SITE_ROOT, 'static'), # Assuming your static files are in a folder named ``static``
)

Verifique se você tem um diretório chamado local_statice statice que você importou os.

Etapa 5

Adicione o seguinte em suas configurações de produção. Se você não tiver configurações separadas para desenvolvimento e produção, veja minha dica profissional sobre o assunto .

Em :settings.py

if os.environ.get('PRODUCTION', False):
AWS_STORAGE_BUCKET_NAME
= 'static.mydomain.com'
DEFAULT_FILES_STORAGE
= 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE
= DEFAULT_FILES_STORAGE
AWS_S3_CUSTOM_DOMAIN
= AWS_STORAGE_BUCKET_NAME

A AWS_S3_CUSTOM_DOMAINconfiguração é opcional. Se você nomear seu intervalo S3 , poderá criar um CNAME para o qual é um alias . Em seguida, você pode servir seus arquivos estáticos prontos para produção de seu próprio domínio!static.mydomain.comstatic.mydomain.comstatic.mydomain.com.s3.amazonaws.com

Etapa 6

Adicione os padrões de URL de arquivos estáticos.

Em urls.py:

from django.conf.urls import patterns, url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns
= patterns('',
... # Your patterns
)

urlpatterns
+= staticfiles_urlpatterns()

Resumo

Então, o que nós fizemos? Implementamos um método que pode ser usado para servir arquivos estáticos do servidor de desenvolvimento localmente e do servidor de produção usando o Amazon S3. Isso é ótimo porque temos acesso rápido aos nossos arquivos estáticos, por exemplo, * .html, * .css, * .js, durante o desenvolvimento; mas podemos atendê-los de um CDN para reduzir custos e melhorar o desempenho.

Além disso, podemos enviar quaisquer arquivos carregados pelos usuários diretamente para o CDN, o que é uma necessidade crítica ao usar certos PaaS, como o Heroku.