Se você precisar fornecer sistema de armazenamento customizado - um exemplo comum é armazenar arquivos em algum sistema remoto - você pode fazê-lo, definindo uma classe de armazenamento customizada. Você precisará seguir esses passos:
Seu mecanismo de amazenamento customizado deve ser uma subclasse de django.core.files.storage.Storage:
from django.core.files.storage import Storage
class MyStorage(Storage):
...
O Django deve ser capaz de instanciar o seu sistema de armazenamento sem quaisquer argumentos. Isto significa que qualquer definição deve ser obtida a partir de django.conf.settings:
from django.conf import settings
from django.core.files.storage import Storage
class MyStorage(Storage):
def __init__(self, option=None):
if not option:
option = settings.CUSTOM_STORAGE_OPTIONS
...
Sua classe de armazenamento deve implementar os métodos _open() e _save(), juntamente com quaisquer outros métodos adequados para sua classe. Veja abaixo mais informações sobre esses métodos. Além disso, se a sua classe forcener um sistema de armazenamento local, ela deve sobrescrever o método path().
Seu sistema de armazenamento personalizado pode sobrescrever qualquer um dos métodos de armazenamento explicados em API de armazenamento de arquivos., mas você deve implementar os seguintes métodos:
Geralmente você também vai querer usar ganchos concebidos especificamente para objetos de armazenamento personalizados. São eles:
Obrigatório.
Chamado por Storage.open(), esse é o verdadeiro mecanismo que a classe de armazenamento usa para abrir o arquivo. Ele deve retornar um objeto File, embora na maioria dos casos, você preferirá retornar alguma subclasse que implemente a lógica específica do backend do sistema de armazenamento.
Chamado por Storage.save(). O name já terá passado por get_valid_name() e get_available_name(), e o content será um objeto File em si.
Deve retornar o nome real do arquivo salvo (normalmente o name recebido, mas se o storage precisa mudar o nome do arquivo o novo nome deve ser retornado).
Retorna um nome de arquivo adequado para uso com o sistema de armazenamento subjacente. O argumento name passado para este método é o nome de arquivo original enviado para o servidor, depois de ter removido qualquer informação de caminho. Sobrescreva este método para customizar como caracteres fora do padrão são convertidos para nomes de arquivos válidos.
O código fornecido em Storage retém apenas caracteres alfanuméricos, pontos e sublinhas do arquivo original, removendo todo o resto.
Retorna um nome de arquivo que está disponível no mecanismo de armazenamento, possivelmente levando em conta o nome de arquivo fornecido. O argumento name passado para este método já terá sido validado para um nome de arquivo válido para o sistema de armazenamento, de acordo com o método get_valid_name() descrito acima.
O código fornecido em Storage simplesmente adiciona sublinhas ao nome do arquivo até encontrar um que esteja disponível no diretório de destino.
Dec 26, 2011