Использование изображений, загруженных в blobstore с использованием Django-nonrel и приложения для передачи файлов - PullRequest
2 голосов
/ 01 июля 2011

Я создаю блог-сайт в Google App Engine, используя django-nonrel, и мне нужен способ хранения и отображения изображений в сообщениях блога и т. Д.

Идея состоит в том, чтобы создать приложение для загрузки изображений.для конкретных статей и т. д., а затем используйте абсолютный или относительный URL-адрес для IMD SRC.

Я использую django-filetransfers для загрузки изображений (http://www.allbuttonspressed.com/projects/django-filetransfers).

Вопросы:1) Кто-нибудь использует Google App Engine и django-nonrel для размещения своего блога?Если да, то как и где вы храните изображения?Использует ли GAE Blobstore для этого излишнее?2) Для URL изображения я использую путь загрузки, настроенный в приложении flie-Transfer.например.Это правильно?Кажется немного странным не ссылаться на расширение .png или что-то еще.Но это может быть способ ссылки на изображения из магазина?

Все еще изучаю веревку с Django и Google App Engine, так что любая помощь будет очень признательна.

Спасибо

1 Ответ

1 голос
/ 17 января 2012

Может,

У меня был подобный опыт использования Blobstore с Django-nonrel.

По первому вопросу Blobstore не является чрезмерным, и я думаю, что на самом деле это единственныйТаким образом, вы можете загрузить изображение без обновления всего проекта и его повторной публикации.GAE не позволяет писать в каталог из-за высокой репликации и безопасности сервера.Это компромисс с возможностью автоматически раскручивать все серверы по мере увеличения спроса.Если вы попытаетесь сделать что-либо, связанное с записью в каталог, App Engine выдаст ошибку.

Я сам ищу лучшее решение для вашего второго вопроса.Я хотел бы иметь возможность ссылаться на файл по имени сам.Я думаю, что ключевым будет добавление дополнительного атрибута к модели «Upload», который будет установлен в имя файла во время сохранения.Я не пробовал, но он должен работать.


Обновление:

Это сработало.

Вот модель:

class UploadModel(models.Model):
    title = models.CharField(max_length=64, blank=True)
    file = models.FileField(upload_to='uploads/%Y/%m/%d/%H/%M/%S/')
    filename = models.CharField(max_length=100, editable=False, null=True, blank=True)

    def save(self, *args, **kwargs):
        self.filename = self.file.name.rsplit('/', 1)[-1]
        super(UploadModel, self).save(*args, **kwargs)

вот обработчик загрузки:

def download_handler(request, filename):
    upload = get_object_or_404(UploadModel, filename=filename)
    return serve_file(request, upload.file, save_as=True)

сопоставление URL:

url(r'^file/(?P<filename>.+)$', 'cms.views.download_handler_filename', name='cms-download_file'),

Как только вы сделаете это, вы сможете получить доступ к файлу по имени файла (это всего лишь фрагмент из примера приложения),Как вы можете видеть, pk был заменен атрибутом filename:

{% url cms-download_file filename=upload.filename as fallback_url %}
<p><img src="{% firstof upload.file|public_download_url fallback_url %}"></p>

Я застрял на себе, заставив public_download_url работать с GAE Blobstore.Если кто-то еще может прокомментировать, как создать надлежащую общедоступную поддержку, которая автоматически генерирует общедоступный URL, я был бы очень признателен.

Предоставление

...