HttpRequest, HttpResponse, JsonResponse
2022. 1. 17. 17:39ㆍ강의 정리/Django Form
반응형
장고(Django)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생각이 있으신 분은 위 출처의 강의를 적극 추천드립니다!!!
서버 - 클라이언트간 프로세스
- 페이지에서 요청(request)가 날라오면, 장고는 HttpRequest 객체를 생성한다.
- 장고는 urls.py에서 정의한 View 클래스 or 함수에 첫번째 인자로 해당 객체(request)를 전달한다.
- 해당 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를 통해 접근
- 함수 기반 뷰 : 매 요청시마다 뷰 함수의 첫번째 인자 request로 전달
- 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()
- .write
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
도움 받은 문서
- https://velog.io/@jcinsh/Django-request-response
- https://ssungkang.tistory.com/entry/Django-HttpRequest-HttpResponse]
- https://hangjastar.tistory.com/206?category=987995
반응형
'강의 정리 > 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 |