2014-03-30 4 views
5

PUT 요청이있어서 미들웨어의 일부 매개 변수 값을 업데이트하고 싶습니다. PUT 매개 변수에 직접 액세스 할 수있는 방법이 없다는 것을 알고 있으므로 request.body을 통해 액세스하고 있습니다.미들웨어에서 Django HttpRequest 본문을 업데이트하는 방법

일단이 값이 업데이트되면이 을보기에 전달해야합니다. 그러나, 나는 수행하려고 : 내 미들웨어

request.body = new_content 

, 내가 얻을 :

AttributeError: can't set attribute 

미들웨어에서 이러한 PARAMS를 업데이트하고이를 전달할 수있는 방법이 있습니까?

답변

9

request.bodyproperty을 클래스로 정의한다.

@property 
def body(self): 
    if not hasattr(self, '_body'): 
     if self._read_started: 
      raise RawPostDataException("You cannot access body after reading from request's data stream") 
     try: 
      self._body = self.read() 
     except IOError as e: 
      six.reraise(UnreadablePostError, UnreadablePostError(*e.args), sys.exc_info()[2]) 
     self._stream = BytesIO(self._body) 
    return self._body 

나는 process_request 방법 _body 특성을 수정하기가 사용하게 될 aproach :

body 속성과 같은 방법 코드입니다. 여기에있는 반환 값은입니다. 장고가 해당 요청을 미들웨어를 통해 적절한보기까지 계속 처리하기를 원하기 때문입니다.

+2

메모를 추가하려면 request.body는 파일 형식의 버퍼'request._stream'에서 읽는 request.read()를 호출합니다. 나는이 버퍼를 "다시 채워 넣어야"(장고 Rest 프레임 워크는이 버퍼에서 읽는다). 'request._stream = BytesIO (body_contents)'에 의해 그렇게 할 수 있습니다. –

관련 문제