HttpRequest, HttpResponse, JsonResponse

2022. 1. 17. 17:39강의 정리/Django Form

반응형

출처 : https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%A5%EA%B3%A0-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard

 

장고(Django)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생각이 있으신 분은 위 출처의 강의를 적극 추천드립니다!!!

 

 


 

서버 - 클라이언트간 프로세스

  1. 페이지에서 요청(request)가 날라오면, 장고는 HttpRequest 객체를 생성한다.
  2. 장고는 urls.py에서 정의한 View 클래스 or 함수에 첫번째 인자로 해당 객체(request)를 전달한다.
  3. 해당 View는 결과값(return)을 HttpResponse or  JsonResponse 객체에 담아서 전달한다

 

 

 

 


 

HttpRequest

  • 클라이언트로부터의 모든 요청 내용을 담고있다.
    • 함수 기반 뷰 : 매 요청시마다 뷰 함수의 첫번째 인자 request로 전달
      •  
      • @login_required def post_list(request): qs = Post.objects.all() q = request.GET.get('q', '') if q: qs = qs.filter(message__icontains=q) return render(request, 'instagram/post_list.html', { 'post_list': qs, 'q' : q, })
    • 클래스 기반 뷰 : 매 요청시마다 self.requset를 통해 접근

 

 

  • Form 처리 관련 속성들
    • .method : 요청의 종류 "GET" 또는 "POST" 로서 모두 대문자
    • .GET : GET 인자 목록 (QueryDict 타입)
    • .POST : POST 인자 목록 (QueryDict 타입)
    • .FILES : POST 인자 중에서 파일 목록 (MultiValueDict 타입)
    • .body : request의 body 객체
    • .headers : request의 headers 객체
    • .COOKIES : 모든 쿠키를 담고 있는 딕셔너리 객체

 

QueryDict : GET과 POST 속성은 django.http.QueryDict의 인스턴스이다. QueryDict은 사전형 타입의 클래스로 같은 키에 대해 복수의 값을 갖도록 커스터마이즈 할 수 있다. 

출처: https://engineer-mole.tistory.com/121 [매일 꾸준히, 더 깊이

 

 

 


 

MultiValueDict

  • dict를 상속받은 클래스
  • 수정 불가능한 특성
  • 동일 key의 다수 value를 지원하는 사전
    • http 요청에서는 하나의 key에 대해서 여러 값을 전달받을 수 있어야 함.
    • URL의 QueryString은 같은 Key로서 다수 Value 지정을 지원 ex) name=Tom&name=Steve&name=Jace
  •  
  • d = MultiValueDict({'name' : ['Son', 'Kane'], 'team': ['SPURS']}) >>> d.getlist('name') ['Son', 'Kane']
  • d = Querydict('name=Son&name=Kane&team=SPURS', encoding='utf8')
    
    >>> d.getlist('name')
    ['Son', 'Kane']

 

 


 

HttpResponse

django.http.HttpResponse

  • 다양한 응답을 Wrapping : HTML 문자열, 이미지 등 # 주로 html을 반환
  • View에서는 반환값으로서 HttpResponse 객체를 기대 #Middleware에서 HttpResponse 객체를 기대
  • 그러기에 하나의 함수는 최소 하나의 HttpResonse를 반환해야한다.
  • HttpResponse의 사용법
    • .write
      •  
      • response = HttpResponse( "<h2>DongBaek</h2>" ) response = HttpResponse() response.write("<h2>Dongbaek</h2>")
    • .flush()
    • .tell()

 


 

JsonResponse

JsonResponse(data, encoder=DjangoJSONEncoder,
             safe=True, json_dumps_params=None, 
             **kwargs)
  • JSON-encoded response를 생성하게 도와준다.
  • encoder은 Django의 데이터를 Serializer 해준다.
Serializer란??
django에 저장되어 있는 모델 인스턴스를 REST API에서 사용하는 JSON의 형태로 바꿔주는 것

 

 


StreamingHttpResponse

  • 먼저 화면은 랜더링을 하고, 뒤늦게 로드를 해야되는 큰 데이터들을 로드를 하기 위해서 만들어진 목적의 장고의 기본 Response이다. ex) 한번에 다운로드 하기에 부담되는 데이터들을 다루기 위함
  • 효율적인 큰(긴) 응답을 위함
    • 혹은 메모리를 많이 먹는 응답 -> iterator를 통한 응답
  • Django는 short-lived 요청에 맞게 디자인 되었기에 큰(긴) 응답 시에는 극심한 성능 저하가 일어날 수 있다.
  • HttpResponse를 상속받지않음.
    • 반드시 iterator를 지정해야만, 제대로 동작
    • .content 속성 사용 안함 -> .streaming_content 사용
    • .tell(), .write() 사용 안함

 


FileHttpResponse

  • StreamingHttpResponse를 상속받음
    • 파일 내용 응답에 최적화
    • Content-Length, Content-Type, Content-Disposition 헤더 자동 지정
  • 인자
    • open_file : Streaming Content
    • as_attachment : Content-Disposition 헤더 지정 여부
    • filename

 

 


도움 받은 문서

 

Django - 요청 및 응답 객체 - 빠른 개요 Django는 요청 및 응답 객체를 사용하여 시스템을 통해 상태

쿠키를 설정합니다. 매개 변수는 Python 표준 라이브러리 의 Morsel 쿠키 오브젝트 와 동일 합니다. Warning RFC 6265 는 사용자 에이전트가 최소 4096 바이트의 쿠키를 지원해야한다고 명시합니다. 많은

runebook.dev

 

반응형

'강의 정리 > Django Form' 카테고리의 다른 글

Django Form Validation  (0) 2022.01.19
Django ModelForm이란?  (0) 2022.01.19
Django Cross Site Request Forgery이란???  (0) 2022.01.18
Django를 더 Django스럽게 만들어주는 Form  (0) 2022.01.18
Django HTML Form  (0) 2022.01.17