HttpResponse ๋?
1. HttpResponse ์ ์
`HttpResponse`๋ Django์์ HTTP ์๋ต์ ์์ฑํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํด๋์ค์ด๋ค.
๋ฌธ์์ด๋ก ์์ฑ๋ ์๋ต ๋ณธ๋ฌธ(body)์ ํด๋ผ์ด์ธํธ์๊ฒ ์ง์ ์ ๋ฌํ๋ค.
2. ํน์ง
- ์ง์ ์๋ต ์์ฑ: ์๋ต ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํ์ฌ ๋ฐํํจ
- ๋จ์ ์๋ต: HTML, JSON, ํ ์คํธ ๋ฑ ๋ชจ๋ ์๋ต ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ ๊ฐ๋ฅํจ
- ์ ์ฐ์ฑ: ํค๋ ์ค์ , HTTP ์ํ ์ฝ๋ ์ง์ ๋ฑ์ ์์ ๋กญ๊ฒ ์ํํจ
์ฌ์ฉ ์์
from django.http omport HttpResponse
def my_view(request):
return HttpResponse("<h1>Hello, World!</h1>")
ํด๋ผ์ด์ธํธ์๊ฒ Hello, World! ๋ผ๋ HTML ์๋ต์ ์ง์ ๋ฐํํ๋ค.
3. HttpResponse ์ฃผ์ ๋งค๊ฐ๋ณ์
- `content`: ์๋ต ๋ณธ๋ฌธ ๋ฐ์ดํฐ
- `content_type`: ์๋ต ๋ฐ์ดํฐ์ MIME ํ์ (๊ธฐ๋ณธ๊ฐ: `text/html`)
- `status`: HTTP ์ํ ์ฝ๋ (๊ธฐ๋ณธ๊ฐ: `200`)
response = HttpResponse("Not Found", content_type = "text/plain", status = 404)
~MIME(Multipurpose Internet Mail Extensions) ํ์ ์ด๋??~
์น ๋ธ๋ผ์ฐ์ ์ ์๋ฒ ๊ฐ์ ํต์ ์์, ๋ฐ์ดํฐ์ ์ข ๋ฅ๋ฅผ ๋ช ํํ ์ง์ ํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ์๋ต ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋๋ก
๋์์ค
1. MIME ํ์ ์ ์ญํ
๋ฐ์ดํฐ์ ์ ํ ์ ์: ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ(์: ๋ธ๋ผ์ฐ์ )์๊ฒ ์๋ต ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋, ํด๋น ๋ฐ์ดํฐ๊ฐ ์ด๋ค ์ข ๋ฅ์ธ์ง ์๋ ค์ค
๋ธ๋ผ์ฐ์ ์ฒ๋ฆฌ ๋ฐฉ์ ๊ฒฐ์ : ๋ธ๋ผ์ฐ์ ๋ MIME ํ์ ์ ๋ณด๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋ง(HTML, ์ด๋ฏธ์ง ๋ฑ)ํ๊ฑฐ๋ ๋ค์ด๋ก๋(ํ์ผ ๋ฑ) ํ๋ค
2. MIME ํ์ ์ ๊ตฌ์กฐ
MIME ํ์ ์ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ค:
- ํ์ (type): ๋ฐ์ดํฐ์ ์ ๋ฐ์ ์ธ ์นดํ ๊ณ ๋ฆฌ (์: `text`, `image`, `application` ๋ฑ)
- ์๋ธํ์ (subtype): ํ์ ์ ์ธ๋ถ ์นดํ ๊ณ ๋ฆฌ (์: `html`, `jpeg`, `json` ๋ฑ)
ํ์:
ํ์ /์๋ธํ์
3. ์ฃผ์ MIME ํ์ ์์
MIME ํ์ | ์ค๋ช | ์์ ๋ฐ์ดํฐ |
`text/html` | HTML ๋ฌธ์ | ์น ํ์ด์ง (`.html`) |
`text/plain` | ์ผ๋ฐ ํ ์คํธ | ํ ์คํธ ํ์ผ (`.txt`) |
`application/json` | JSON ๋ฐ์ดํฐ | JSON ์๋ต |
`application/xml` | XML ๋ฐ์ดํฐ | XML ํ์ผ (`.xml`) |
`image/jpeg` | JPEG ์ด๋ฏธ์ง | ์ด๋ฏธ์ง ํ์ผ (`.jpg`) |
`image/png` | PNG ์ด๋ฏธ์ง | ์ด๋ฏธ์ง ํ์ผ (`png`) |
`application/pdf` | PDF ๋ฌธ์ | PDF ํ์ผ (`.pdf`) |
`application/octet-stream` | ์ด์ ๋ฐ์ดํฐ (ํน์ ํ์ ๋ฏธ์ง์ ) | ์คํ ํ์ผ (`.exe`, `.bin`) |
4. Django์์ MIME ํ์ ์ค์
- HttpResponse์ MIME ํ์
Django์์ `HttpResponse`๋ฅผ ์ฌ์ฉํ ๋, `content_type` ๋งค๊ฐ๋ณ์๋ฅผ ํตํด MIME ํ์ ์ ์ง์ ํ ์ ์๋ค.
from django.http import HttpResponse
# ํ
์คํธ ์๋ต
def text_response(request):
return HttpResponse("Hello, this is plain text.", content_type="text/plain")
# JSON ์๋ต
import json
def json_response(request):
data = {'message': 'Hello, JSON!'}
return HttpResponse(json.dumps(data), content_type="application/json")
- render์ MIME ํ์
`render`๋ ๊ธฐ๋ณธ์ ์ผ๋ก HTML ์๋ต์ ์์ฑํ๋ฉฐ, MIME ํ์ ์ด ์๋์ผ๋ก `text/html`๋ก ์ค์ ๋๋ค.
ํ์ํ๋ฉด `content_type` ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํด ๋ค๋ฅธ MIME ํ์ ์ผ๋ก ๋ณ๊ฒฝํ ์๋ ์๋ค.
from django.shortcuts import render
def my_view(request):
context = {'key' : 'value'}
return render(request, 'template.html', context, content_type = "text/html")
5. MIME ํ์ ์ด ์ค์ํ ์ด์
- ์ ํํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ:
- ๋ธ๋ผ์ฐ์ ๋ MIME ํ์ ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
- ์: `text/html`์ด๋ฉด HTML๋ก ๋ ๋๋ง, `application/json`์ด๋ฉด JSON ๋ฐ์ดํฐ๋ก ์ฒ๋ฆฌ
- ๋ณด์:
- MIME ํ์ ์ด ์๋ชป ์ค์ ๋๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ชป ์ฒ๋ฆฌํ๊ฑฐ๋ ์ ์ฑ ์ฝ๋ ์คํ ์ํ์ด ์๊ธธ ์ ์๋ค.
- ์: HTML ํ์ผ์ `text/plain`์ ์ค์ ํ๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฅผ ๋ ๋๋งํ์ง ์๊ณ ๋จ์ ํ ์คํธ๋ก ํ์ํจ
- ํธํ์ฑ:
- ๋ค์ํ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ , API ์๋น์)์ ํต์ ํ ๋ MIME ํ์ ์ ๋ฐ์ดํฐ์ ๋ช ํ์ฑ์ ๋ณด์ฅํ๋ค.
render ๋?
1. render ์ ์
`render`๋ ํ ํ๋ฆฟ ์์คํ ์ ์ฌ์ฉํด HTML์ ๋ ๋๋งํ๊ณ , ์ด๋ฅผ ์๋ต์ผ๋ก ๋ฐํํ๋ ํจ์์ด๋ค.
`HttpResponse`๋ฅผ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ํ ํ๋ฆฟ ๋ ๋๋ง ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ๋ค.
2. ํน์ง
- ํ ํ๋ฆฟ ๊ธฐ๋ฐ ์๋ต: HTML ํ์ผ(ํ ํ๋ฆฟ)์ ๋ ๋๋งํ๊ณ ๋ฐํํจ
- ์ปจํ ์คํธ ์ ๋ฌ: ํ ํ๋ฆฟ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ์ฌ ๋์ ์ธ HTML ์์ฑ์ด ๊ฐ๋ฅ
- ๋จ์ถ ํจ์: `render`๋ `HttpResponse`์ `loader.render_to_string`์ ์กฐํฉํ ๋จ์ถ ํจ์์
์ฌ์ฉ ์์
from django.shrotcuts import render
def my_view(request):
context = {'name' : 'Alice'}
return render(request, 'my_template.html', context)
`my_template.html` ํ ํ๋ฆฟ ํ์ผ์ ๋ ๋๋งํ๊ณ , {'name' : 'Alice'} ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค.
3. render ์ฃผ์ ๋งค๊ฐ๋ณ์
- `request`: ์์ฒญ ๊ฐ์ฒด
- `template_name`: ๋ ๋๋งํ ํ ํ๋ฆฟ ํ์ผ ๊ฒฝ๋ก
- `context`: ํ ํ๋ฆฟ์ ์ ๋ฌํ ๋ฐ์ดํฐ(๋์ ๋๋ฆฌ ํํ)
- `content_type`: ์๋ต ๋ฐ์ดํฐ์ MIME ํ์
- `status`: HTTP ์ํ ์ฝ๋
return render(request, 'my_template.html', {'name' : 'Alice'}, status = 200)
HttpResponse์ render์ ์ฐจ์ด์ ๋น๊ต ๐
ํญ๋ชฉ | HttpResponse | render |
์ญํ | ๋ฌธ์์ด๋ก ์์ฑ๋ HTTP ์๋ต ๋ฐํ | ํ ํ๋ฆฟ์ ๋ ๋๋งํ์ฌ HTML ์๋ต ๋ฐํ |
ํ ํ๋ฆฟ ์ฌ์ฉ ์ฌ๋ถ | ํ ํ๋ฆฟ์ ์ฌ์ฉํ์ง ์์ | ํ ํ๋ฆฟ ํ์ผ์ ์ฌ์ฉํด ๋์ HTML ์์ฑ |
์๋ต ๋ฐ์ดํฐ | HTML, ํ ์คํธ, JSON, XML ๋ฑ ๋ชจ๋ ๋ฐ์ดํฐ | ์ฃผ๋ก HTML ์๋ต์ ์ฌ์ฉ๋จ |
์ฌ์ฉ ํธ์์ฑ | ๋ชจ๋ ์ธ๋ถ ์ฌํญ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑ | ํ
ํ๋ฆฟ ๋ ๋๋ง๊ณผ `HttpResponse` ์์ฑ ์๋ํ |
์ปจํ ์คํธ ์ ๋ฌ | ์ง์ ๋ฌธ์์ด๋ก ๋ฐ์ดํฐ ๊ตฌ์ฑ | ํ ํ๋ฆฟ์ ๋์ ๋๋ฆฌ ํํ์ ๋ฐ์ดํฐ ์ ๋ฌ ๊ฐ๋ฅ |
1. ์ธ์ ์ฌ์ฉํด์ผ ํ๋์ง?
HttpResponse๋ฅผ ์ฌ์ฉํ ๋
- ๊ฐ๋จํ ์๋ต ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ฐํํ ๋
- ํ
ํ๋ฆฟ ๋ ๋๋ง์ด ํ์ ์๋ ๊ฒฝ์ฐ
- ์: JSON, XML, ํ ์คํธ ํ์ผ ๋ฐํ
- HTTP ์ํ ์ฝ๋๋ ํค๋๋ฅผ ์ธ๋ถ์ ์ผ๋ก ์ ์ดํ ๋
์์ : JSON ์๋ต ์์ฑ
from django.http import HttpResponse
import json
def json_view(request):
data = {'message' : 'Hello, World!'}
return HttpResponse(json.dumps(data), content_type = 'application/json')
render๋ฅผ ์ฌ์ฉํ ๋
- ํ ํ๋ฆฟ ํ์ผ์ ๋ ๋๋งํ์ฌ HTML ์๋ต์ ๋ฐํํ ๋
- ๋ฐ์ดํฐ๋ฅผ ํ ํ๋ฆฟ์ ์ ๋ฌํ๊ณ , ๋์ ์ธ ์น ํ์ด์ง๋ฅผ ์์ฑํ ๋
- ์ฌ์ฉ์์๊ฒ ์นํ์ ์ธ HTML ํ์ด์ง๊ฐ ํ์ํ ๋
์์ : ํ ํ๋ฆฟ์ ํตํ ์๋ต ์์ฑ
from django.shortcuts import render
def home_view(request):
context = {'title' : 'Welcome', 'user' : 'Alice'}
return render(request, 'home.html', context)
TIL ์์ฑํ๋ฉฐ ๋๋ ์ :
HttpResponse ๋ ๋จ์ํ๊ณ ์ง์ ์ ์ธ ์๋ต์ด ํ์ํ ๋ ์ฌ์ฉํ๊ณ ,
render ๋ ํ ํ๋ฆฟ ๋ ๋๋ง์ด ํ์ํ ๋ ์ฌ์ฉํ๋ฉด ๋๊ฒ ๊ตฌ๋~~
์ ๊ทธ๋ ๊ตฌ๋~!~!
'AI ๐ค > Django โ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250122] DateTimeField() ๊ฐ๋ ์ ๋ฆฌ~ (0) | 2025.01.22 |
---|---|
[250121] ์ฟผ๋ฆฌ์ (QuerySet)์ด๋? (0) | 2025.01.21 |
[250116] ์คํค๋ง(Schema)์ ERD(Entity-Relationship Diagram) (7) | 2025.01.16 |
[250115] REST ์ RESTful ์ ๋ํ ์ ๋ฐ์ ์ธ ๊ฐ๋ ์ ๋ฆฌ~ (1) | 2025.01.15 |
[250114] Django์ ๋ค์ค App๊ณผ URL์ด๋? (0) | 2025.01.14 |