При попытке отправить форму с полем изображений в нем я добираюсь:
Exception Type: OSError at /user/register/
Exception Value: (13, 'Permission denied')
Конечно, первая вещь, которую я проверил, была полномочиями к моим папкам и на всякий случай установила их на 777 на целом пути от '/'. Тем не менее ничто. Таким образом, я попытался добавить параметры к настройкам, которые теперь установлены как это:
ADMIN_MEDIA_PREFIX
'/site_media/admin/'
CACHE_BACKEND
'locmem://'
DEFAULT_CHARSET
'utf-8'
DEFAULT_CONTENT_TYPE
'text/html'
DEFAULT_FILE_STORAGE
'django.core.files.storage.FileSystemStorage'
FILE_CHARSET
'utf-8'
FILE_UPLOAD_HANDLERS
('django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler')
FILE_UPLOAD_MAX_MEMORY_SIZE
2621440
FILE_UPLOAD_PERMISSIONS
777
FILE_UPLOAD_TEMP_DIR
None
FS_ROOT
'/home/rails/fandrive'
MEDIA_ROOT
'/home/fandrive/www/fandrive/site_media'
MEDIA_URL
'/site_media/'
PROJECT_PATH
'/home/rails/fandrive'
SESSION_FILE_PATH
None
Запрос. META:
CONTENT_LENGTH
'8249'
CONTENT_TYPE
'multipart/form-data; boundary=---------------------------26681719213985'
DOCUMENT_ROOT
'/home/rails/fandrive/public'
HTTP_ACCEPT
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
HTTP_ACCEPT_CHARSET
'ISO-8859-1,utf-8;q=0.7,*;q=0.7'
HTTP_ACCEPT_ENCODING
'gzip,deflate'
HTTP_ACCEPT_LANGUAGE
'en-us,en;q=0.5'
HTTP_CONNECTION
'keep-alive'
HTTP_CONTENT_LENGTH
'8249'
HTTP_CONTENT_TYPE
'multipart/form-data; boundary=---------------------------26681719213985'
HTTP_HOST
'example.com'
HTTP_KEEP_ALIVE
'115'
HTTP_REFERER
'http://example.com/user/register/'
HTTP_USER_AGENT
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6'
PATH_INFO
u'/user/register/'
QUERY_STRING
''
REMOTE_PORT
'52869'
REQUEST_METHOD
'POST'
REQUEST_URI
'/user/register/'
SCRIPT_NAME
u''
SERVER_PROTOCOL
'HTTP/1.1'
SERVER_SOFTWARE
'Apache'
_
'_'
wsgi.errors
<open file '<stderr>', mode 'w' at 0x7f2a6026f140>
wsgi.input
<socket._fileobject object at 0x7f2a5cbc4848>
wsgi.multiprocess
True
wsgi.multithread
False
wsgi.run_once
True
wsgi.url_scheme
'http'
wsgi.version
(1, 0)
И наконец мой traceback:
Traceback:
File "/home/rails/fandrive/site-packages/django/core/handlers/base.py" in get_response
92. response = callback(request, *callback_args, **callback_kwargs)
File "/home/rails/fandrive/registration/views.py" in register
47. new_user = backend.register(request, **form.cleaned_data)
File "/home/rails/fandrive/registration/backends/default/__init__.py" in register
23. request=request)
File "/home/rails/fandrive/site-packages/django/dispatch/dispatcher.py" in send
166. response = receiver(signal=self, sender=sender, **named)
File "/home/rails/fandrive/regbackend.py" in user_created
39. data.save()
File "/home/rails/fandrive/site-packages/django/db/models/base.py" in save
410. self.save_base(force_insert=force_insert, force_update=force_update)
File "/home/rails/fandrive/site-packages/django/db/models/base.py" in save_base
483. values = [(f, f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True))) for f in meta.local_fields if not isinstance(f, AutoField)]
File "/home/rails/fandrive/site-packages/django/db/models/fields/files.py" in pre_save
252. file.save(file.name, file, save=False)
File "/home/rails/fandrive/site-packages/django/db/models/fields/files.py" in save
91. self.name = self.storage.save(name, content)
File "/home/rails/fandrive/site-packages/django/core/files/storage.py" in save
47. name = self._save(name, content)
File "/home/rails/fandrive/site-packages/django/core/files/storage.py" in _save
146. os.makedirs(directory)
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs
150. makedirs(head, mode)
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs
150. makedirs(head, mode)
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs
150. makedirs(head, mode)
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs
150. makedirs(head, mode)
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs
150. makedirs(head, mode)
File "/bin/python-2.6.1/lib/python2.6/os.py" in makedirs
157. mkdir(name, mode)
Какие-либо идеи, что больше я должен проверить?
ОБНОВЛЕНИЕ: Моя модель
class UserProfile(InheritedProfile):
def upload_path(self, field_attname):
filename = hashlib.md5(field_attname).hexdigest()[:4] + "_" + field_attname
return "uploads/users/%s" % (filename,)
user = models.ForeignKey(User, unique=True, related_name='profile')
image = models.ImageField(upload_to=upload_path, verbose_name="Image", blank=True, null=True)
Я уже создал папку 'загрузок/пользователей' итак, почему она пытается создать папку - не только файл?
Использование apache, которое запускает ваше приложение django, не имеет разрешения на создание папки / файла в вашем каталоге мультимедиа.
Быстрое временное решение:
Перейдите в папку мультимедиа:
/ home / fandrive / www / fandrive / site_media
и введите:
sudo chmod -R a+w
, что сделает вашу папку доступной для записи всем пользователям.
Этот подход может быть небезопасным. Чтобы сделать его безопасным, вы можете изменить владельца папки на этого пользователя или создать группу и назначить ей разрешения.