Django의 response.

3165 단어
render_to_response
render_to_response('index.html', locals(),context_instance=RequestContext(request))

매개변수 순서: (template name, dictionary=None, context instance=None)
django 템플릿 시스템에는 두 가지 봉인 템플릿 변수의 종류가 있는데 하나는 django이다.template.Context, 이것은 가장 자주 사용하는 것입니다. 우리는render 를 사용합니다.to_response 방법에서 두 번째 dictionary 인자를 전송하면 이 Context 클래스에 한 번 봉인되어 템플릿에 전송됩니다.
또 하나는 django.template.RequestContext 는 Context 클래스와 두 가지 차이점이 있습니다.
첫 번째 차이점은 RequestContext 변수를 생성할 때 HttpRequest 대상을 첫 번째 인자로 전송해야 한다는 것이다.
그 다음에 템플릿에 자동으로 주입되는 변수를 증가시킵니다. 이 변수는 settings의 TEMPLATECONTEXT_PROCESSORS에 선언된 메서드가 반환됩니다. TEMPLATECONTEXT_PROCESSORS의 방법은 Http Request 대상을 수신하고, 최종적으로return은 dict입니다.이 dictionary 안의 요소는 RequestContext에서 템플릿을 자동으로 주입하는 변수가 됩니다.예컨대django.contrib.auth.context_processors.auth는user,messages,perms 변수를 되돌려줍니다
# in django/contrib/auth/context_processors.py
def auth(request):
    """ ignore doc string """
    def get_user():
        ....
 
    return {
        'user': SimpleLazyObject(get_user),
        'messages': messages.get_messages(request),
        'perms':  lazy(lambda: PermWrapper(get_user()), PermWrapper)(),
    }

때때로 dictionary=locals () 라는 동작을 사용합니다. 이것은 현재 영역의 모든 국부 변수를 dictionary에 부여하는 것입니다.
Response와 HttpResponse의 차이점
  • HttpResponse
    # django/http/response.py
    # HttpResponse    
    class HttpResponseBase(six.Iterator):
        def __init__(self, content_type=None, status=None, reason=None, charset=None):
    
    class HttpResponse(HttpResponseBase):
        def __init__(self, content=b'', *args, **kwargs):
            super(HttpResponse, self).__init__(*args, **kwargs)
            # Content is a bytestring. See the `content` property methods.
            self.content = content
  • HttpResponse 객체는 Django에서 작성하여 함수 뷰에 자주 사용됩니다
  • 슈퍼 ()는 부류를 호출하는 데 자주 사용된다.python super(HttpResponse, self).__init__(*args, **kwargs) HttpResponse 상위 클래스 HttpResponseBase를 호출하는init__방법
  • 따라서 HttpResponse 생성 형식은 HttpResponse(content=응답체, content type=응답체 데이터 형식,status=상태 코드)
  • 전방에 json 데이터 형식이 필요하고 데이터가 사전이라면 수동으로 데이터를 json 형식으로 바꿔야 합니다.HttpResponse(json.dumps(data))

  • Response
    # rest_framework/response.py
    # Response    
    class Response(SimpleTemplateResponse):
        def __init__(self, data=None, status=None,
                     template_name=None, headers=None,
                     exception=False, content_type=None):
  • Response 객체는 Django REST 프레임워크 패키지의 객체
  • Response는 자동으로 데이터를 json으로 전송하며 수동으로 변환할 필요가 없습니다.심지어 직접 Response(data=serializer.data)
  • 까지 가능
  • 일반적으로 DRF 프레임의 클래스 보기에서 Response 대상을 사용하고 클래스의 보기는 APIView
  • 를 계승해야 한다.
  • 함수 보기에서 Response를 사용하려면 @apiview 장식기, 예를 들어
    from rest_framework.decorators import api_view
    
    @api_view(['GET', 'POST', ])
    def articles(request, format=None):
        data= {'articles': Article.objects.all() }
        return Response(data, template_name='articles.html')
    장식기를 추가하지 않으면 ".accepted renderer not set on Response"
  • 좋은 웹페이지 즐겨찾기