Как настроить Django ImageField с upload_to и MEDIA_ROOT в Webfaction? - PullRequest
3 голосов
/ 24 октября 2011

У меня есть следующее поле модели в проекте django:

headshot = models.ImageField(upload_to='/tmp', blank=True, null=True)

settings.py

# format                                    <project>/<app>
MEDIA_ROOT = '/home/username/webapps/django/myproject/books/media/'

Я создал каталог: /home/username/webapps/django/myproject/books/media/tmp и дал ему chmod 777 прав доступа.

При попытке добавить новое изображение появляется следующая ошибка:

SuspiciousOperation at /admin/books/author/add/
Attempted access to '/tmp/Comment.png' denied.
Request Method: POST
Request URL:    http://username.webfactional.com/app/admin/books/author/add/
Django Version: 1.3.1
Exception Type: SuspiciousOperation
Exception Value:    
Attempted access to '/tmp/Comment.png' denied.
Exception Location: /home/username/webapps/django/lib/python2.7/django/core/files/storage.py in path, line 234
Python Executable:  /usr/local/bin/python
Python Version: 2.7.1

Кто-нибудь знает, что я делаю не так? Нужно ли мне .htaccess или другие настройки, чтобы иметь возможность записи в этот каталог, или что-то не так с моей конфигурацией Django?

Я все еще хотел бы знать, какие значения chmod использовать и как установить MEDIA_URL. Я думаю, что мне нужно что-то сделать в urls.py для MEDIA_URL.

Мой проект настроен на Webfaction веб-хостинга, если это имеет значение.

Ответы [ 2 ]

7 голосов
/ 24 октября 2011

Исправлено. Похоже, что ответом было использование upload_to = 'tmp' вместо upload_to = '/ tmp'.

2 голосов
/ 18 января 2012

Я вижу, вы отметили это как ответ, но у вас все еще есть вопросы в вашем ответе. Вот как я это настроил, если вы все еще работаете над этим.


Настройка нового приложения для мультимедиа (через панель управления webfaction). Я использовал приложение «static_only», потому что оно должно препятствовать загрузке скриптов пользователями и их запуску. Вы также можете использовать один из «static / cgi / php». Создание нового приложения для этого (вместо использования Django и создания нового представления) является хорошей практикой, поскольку оно будет иметь меньший объем прослушиваемых ресурсов. Django излишне подходит для обслуживания статических файлов (изображений, CSS-файлов, файлов JavaScript и т. Д.).

Свяжите свое новое мультимедийное приложение (static_only или все, что вы использовали) с каким-либо URL, снова используя панель управления webfaction. Я привязал мой к media..com. Для MEDIA_URL должен быть указан URL, через который вы можете получить доступ к медиафайлам, а MEDIA_ROOT должен быть корневым каталогом для мультимедийного приложения. Таким образом, в моем файле settings.py у меня есть:

MEDIA_ROOT = '/home/<username>/webapps/media/'
MEDIA_URL = 'http://media.<mydomain>.com/'

Лучше сделать то же самое для STATIC_ROOT и STATIC_URL.

Что касается разрешений, значения по умолчанию должны быть в порядке - если у вас есть проблемы с этим, просто спросите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...