django에서 FileField를 사용하여 모델을 설정해야하지만 사용자가 값을 제공하지 않으면 기본값을 설정해야합니다.django 파일 필드의 기본값을 읽으 려 할 때 의심스러운 오류가 발생했습니다
하지만, 내 모델 정의는 인 내가 읽고 있던 및 장고 오히려하여 upload_to 매개 변수에 지정된 이외의 경로로이 분야에 대한 액세스를 차단, 그래서 난이 정확해야 추측
class AutoAttendant(models.Model):
name = models.CharField(max_length=32)
t_menu_id = models.IntegerField()
t_menu_prompt = models.FileField(upload_to='user_menus', default='%suser_menus/ringtu_default.mp3' % settings.MEDIA_URL, \
blank=True, null=False)
다음
는하지만, 다음,이 파일을 읽고 외부 웹 서비스에 보낼 필요하고 내가 할 때 다음
send_to_ws(autoattendant_instance.t_menu_prompt.path)
내가이 S 얻을 uspiciousOperation 오류, 여기에 어떤 단서?
대단히 감사합니다.
는 편집 : 추가 추가 정보를 원하시면 여기
send_to_ws가하는 일이다 :이 기능에
def add_menu(self, filepath, menu='ROOT'):
method = self.service.set_menu_prompt
f = open(filepath, 'rb')
data = f.read()
mime_type = 'audio/mpeg'
bin_param = (data, mime_type)
request = self.factory.create('ns0:SetMenuPromptRequest')
request.i_menu = self.get_menu_id(menu)
request.prompt_type = 'menu'
request.prompt = f.name.split('/')[-1]
response = attach(method, bin_param, ATT_EP, request)
return response
나는 비눗물 soap_request 객체를 구축하고 바이너리 첨부 파일로 파일을 첨부합니다.
실제 문제는 내가이 함수에서 직접 열기 (파일)한다고 생각합니다.이 문제를 해결할 수있는 방법이 있습니까?
또한, 여기에 결국 역 추적
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/account/finish/
Django Version: 1.5
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.admindocs',
'gunicorn',
'django_extensions',
'south',
'compressor',
'ringtu',
'localization',
'profiles',
'services')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
115. response = callback(request, *callback_args, **callback_kwargs)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
25. return view_func(request, *args, **kwargs)
File "/home/israelord/Work/RingTu/proyecto/code/profiles/views.py" in account_finish
351. upload = ph.add_menu(user)
File "/home/israelord/Work/RingTu/proyecto/code/profiles/helpers.py" in add_menu
57. response_upload = attwpr.add_menu(att)
File "/home/israelord/Work/RingTu/proyecto/code/services/decorators.py" in _wrap
33. result = f(*args, **kwargs)
File "/home/israelord/Work/RingTu/proyecto/code/services/autoattendant_wrapper.py" in add_menu
111. data = att_instance.t_menu_prompt.read()
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/core/files/utils.py" in <lambda>
16. read = property(lambda self: self.file.read)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/db/models/fields/files.py" in _get_file
46. self._file = self.storage.open(self.name, 'rb')
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/core/files/storage.py" in open
36. return self._open(name, mode)
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/core/files/storage.py" in _open
159. return File(open(self.path(name), mode))
File "/home/israelord/.virtualenvs/ringtu-env/local/lib/python2.7/site-packages/django/core/files/storage.py" in path
259. raise SuspiciousOperation("Attempted access to '%s' denied." % name)
Exception Type: SuspiciousOperation at /account/finish/
Exception Value: Attempted access to '/media/user_menus/ringtu_default.mp3' denied.
을 파고 것 같아요 그러나이 모델은 올바르게 기본 파일을 가정한다? –
올바른, filedfile 개체를 올바르게 얻을 수 있어요. – israelord
질문 제목이 오해의 소지가 있습니다. 내용도 마찬가지입니다. 'send_to_ws' 소스를 게시 할 수 있습니까? –