일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- django ORM
- 알고리즘
- 장고
- react
- django rest framework
- js
- form
- Django
- PYTHON
- django widget
- java
- es6
- web
- Algorithm
- AWS
- Git
- Baekjoon
- 알고리즘 풀이
- c++
- 알고리즘 문제
- 파이썬 알고리즘
- DRF
- HTML
- 파이썬
- javascript
- CSS
- 알고리즘 연습
- MAC
- API
- 백준
- Today
- Total
수학과의 좌충우돌 프로그래밍
[Django] HttpRequest, HttpResponse 본문
HttpRequest
클라이언트로 부터 들어오는 모든 요청을 담고 있습니다. 일반적으로 클라이언트는 웹브라우저를 말하며 django restful API 로 안드로이드 등 앱과 연결 시킬 경우에는 클라이언트가 바뀔 수도 있겠죠.
request 에 접근
views 에서 함수를 정의할 때 아무렇지 않게 인자로 넘겨 주었던 request
가 바로 HttpRequest
의 객체입니다. 따라서 FBV 에서는 request
로 접근하고 CBV 에서는 self.request
로 접근을 하게 됩니다.
request 속성
-
method
request 요청의 종류를 나타냅니다.
"GET"
또는"POST"
로서 대문자로 저장이 됩니다. 다음과 같은 분기문을 통해서 들어온 요청에 종류에 따라서 다른 작업을 수행할 수 있습니다.def post_create(request): if request.method == "POST": # 생략 else if request.method == "GET": # 생략
-
GET
GET 인자 목록에 접근 할 수 있습니다. 자료형은
QueryDict
입니다.QueryDict 란?
python의 dict 과 유사한 자료형으로서 차이는 dict 은 Key 값이 중복 안되는데 비해 querydict 은 중복을 허용합니다.
-
POST
POST 인자 목록에 접근 할 수 있습니다. 마찬가지로 자료형은
QueryDict
입니다. 이 때 file 에 대해서는 접근할 수 없습니다.
-
FILES
POST 인자 중 파일에 한해서 접근이 가능합니다.
HttpResponse
html 파일, 이미지 등 다양한 응답을 해줄 수 있습니다. 그리고 FBV 기준으로 HttpResponse
가 없다면 오류를 발생합니다. 하나의 함수는 최소 하나의 HttpResponse
을 반환해야합니다. 이는 views 에서 검사하는게 아니라 middleware
에서 검사를 하게 됩니다.
# config/settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
middleware
는 다음과 같이 app을 감싸고 있으면서 request 가 들어올 때는 적절하게 가공해주고 response 가 나갈 때도 확인을 해줍니다. 여러 middleware
중 HttpResponse
의 반환 유무를 확인해주는 것도 있습니다.
예시
HttpResponse
는 다음과 같이 사용합니다.
# 방법 1
response = HttpResponse(
"<div>Hello World!</div>"
)
# 방법 2
response = HttpResponse()
response.write("<div>Hello World!</div>")
'웹프로그래밍 > Django' 카테고리의 다른 글
[Django]Cross Site Request Forgery, csrf 공격과 대응 (0) | 2019.08.09 |
---|---|
[Django] Form 과 validations (0) | 2019.08.08 |
[Django] FBV 와 CBV 의 decorators 사용법 (0) | 2019.08.08 |
[Django] CBV (2) Generic display views (2) | 2019.08.06 |
[Django] CBV (1) CBV 와 Base Views (2) | 2019.08.06 |