Django와 RESTful API를 공유하여 mp3를 공유하려고합니다. 바로 장난감 앱입니다. 프로덕션에 들어 가지 않으므로 확장하거나 걱정할 필요가 없습니다. 희망) 저작권 악마에 대해. 이제 내 문제는 내가 장고보기를 HTTP PUT 요청의 끝점으로 만들고 싶다는 것입니다. PUT의 헤더에는 메타 데이터가 포함될 것이며 본문은 독점적으로 바이너리가됩니다.Django에 바이너리 데이터를 푸는 데 문제가 있습니다.
실제 조회수 (맞음)입니다. 유의하시기 바랍니다 로깅 제어 흐름은 내가 특히 강력하지 않을 경우, 올바른 생각 풋() 메소드를 입력하지 있음을 나타냅니다 :이 테스트에서, 내가 장고의 유닛 테스트 프레임 워크를 사용하여 전달하는 unittests를 얻을 수 있었다
class UserSong(RESTView):
logging.debug('entering UserSong.put')
def put(self, request, username=''):
if request.META['Content-Type'] != 'octet/stream':
raise Http400()
title = request.META['X-BD-TITLE'] if 'X-BD-TITLE' in request.META else 'title unknown'
artist = request.META['X-BD-ARTIST'] if 'X-BD-ARTIST' in request.META else 'artist unknown'
album = request.META['X-BD-ALBUM'] if 'X-BD-ALBUM' in request.META else 'album unknown'
song_data = b6decode(request.raw_post_data)
song = Song(title=title, artist=artist, playcount=playcount, is_sample=is_sample, song_data=song_data, album=album)
song.save()
return HttpResponse('OK', 'text/plain' , 201)
def __call__(self, request, *args, **kwargs):
logging.basicConfig(filename=LOGFILE,level=logging.DEBUG)
try:
if request.method == 'DELETE':
return self.delete(request, *args, **kwargs)
elif request.method == 'GET':
return self.get(request, *args, **kwargs)
elif request.method == 'POST':
return self.post(request, *args, **kwargs)
elif request.method == 'PUT':
return self.put(request, *args, **kwargs)
except:
raise Http404()
, 나는 그것이 실제 생활을 정확하게 모방한다고 믿지 않는다. 그래서 열린 httplib을 깨고 PUT을 구성했습니다. 내 URL을 그 상당히 확신 가끔
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 880, in request
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 914, in _send_request
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 719, in send
File "<string>", line 1, in sendall
error: [Errno 32] Broken pipe
를 얻을 수 있지만
>>>method = 'PUT'
>>>url = 'accounts/test/songs/'
>>>f = open('/Users/bendean/Documents/BEARBOT.mp3')
>>>data = f.read()
>>>body = data
>>>headers = {'X-BD-ARTIST' : 'BEARBOT' , 'X-BD-ALBUM':'','X-BD-TITLE':'LightningSPRKS'}
>>>headers['CONTENT-TYPE'] = 'octet/stream'
>>>import httplib
>>>c = httplib.HTTPConnection('localhost:8000')
>>>c.request(method, url, body, headers)
내가 얻을 응답이
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 880, in request
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 914, in _send_request
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/httplib.py", line 719, in send
File "<string>", line 1, in sendall
error: [Errno 54] Connection reset by peer
꽤되지 않습니다 : 이것은 내가 대화 형으로 실행하는 코드입니다 (GET 처리기가 잘하고, 고맙습니다) 일하고 있습니다. 로깅은 요청이 실제로 처리기 코드에 적용되지 않음을 나타냅니다.
주위를 인터넷으로 검색하면 큰 파일 (이 파일은 3.7MB)을 업로드하는 중에 문제가 httplib에서 오류를 처리하고 있음을 알리는 추적 프로그램을 제공합니다.
그래서 나는 여기 내 깊이가 없다는 것을 인정하는 것을 부끄러워하지 않습니다. 오류의 원인을 어떻게 결정할 수 있습니까? 내 요청을 올바르게 형식화하고 있습니까? (p.s. 또한 동일한 결과로 본문을 b64 인코딩하는 중) 시도 했습니까? 더 큰 의미에서, 내가하고있는 것이 합리적인가? dev 서버의 구성 가능한 설정과 관련이 있습니까? 아파치에이 문제를 해결하려고하면 이러한 문제가 사라질까요? 귀하의 도움은 대단히 감사하겠습니다.
넣을 수있는 장고보기를 게시 할 수 있습니까? 하나의 추측이 django 개발자 서버 (manage.py runserver)를 사용하고 있다면 큰 파일 요청을 처리하지 못할 수도 있습니다. – Purrell
해결 되었습니까? – bentford