2013-06-05 1 views
0

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. 
+0

을 파고 것 같아요 그러나이 모델은 올바르게 기본 파일을 가정한다? –

+0

올바른, filedfile 개체를 올바르게 얻을 수 있어요. – israelord

+0

질문 제목이 오해의 소지가 있습니다. 내용도 마찬가지입니다. 'send_to_ws' 소스를 게시 할 수 있습니까? –

답변

0

이다, 문제는 내 FileField와()

처음

에서 그것을 어떻게이이었다에 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) 

그리고 이것은이 질문에 대한 답변 덕분에 변경되었습니다. Suspicious Operation Django

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) 

upload_to 정의 끝에 슬래시가 있습니다.

내가 지금 왜 작동하는지 아무 생각이 없다, 그것은하지 않습니다 내가 나중에 그것으로

관련 문제