Django - Метод url класса хранилища
<url
метод будет выполняться при рендеринге каждого изображения, что приведет к обращению к Dropbox API, что кажется излишним.
Будет ли правильным вместо этого перенести функциональность общей ссылки в _save
и хранить URL в атрибуте name (varchar в DB) и оставить url()
пустым?
Другими словами в _save
вернуть (сохранить в БД) url изображения вместо названия изображения.
class DropboxStorage(Storage):
def __init__(self, options=None):
if not options:
options = settings.CUSTOM_STORAGE_OPTIONS
self.d = dropbox.Dropbox(options['DROPBOX_KEY'])
def _open(self, name, mode='rb'):
with open(name, mode=mode) as f:
return File(f, name)
def _save(self, name, content):
meta = self.d.files_upload(
content.read(), f'/Images/{name}', autorename=True)
return meta.name
def url(self, name):
link_meta = self.d.sharing_create_shared_link(f'/Images/{name}')
return link_meta.url.replace('dl=0', 'raw=1')
# no need to implement since files_upload will take care of duplicates
def exists(self, name):
return False