# Django
- ํ์ด์ฌ์ผ๋ก ๋ง๋ค์ด์ง ๋ฌด๋ฃ ์คํ์์ค ์น ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
# ์ฅ๊ณ ํ๋ก์ ํธ ๊ฒฐ๊ณผ๋ฌผ
# ์ฅ๊ณ ํ๋ก์ ํธ ์ค๋ช
- urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('result/', views.result, name='result'),
]
Django ํ์ผ์์ main ํด๋ ์์ ์๋ urls.py ์ด ๊ณณ์์ result/ ํจํด์ผ๋ก URL ๋งํฌ ํจํด์ ์ค์ ํด์ค๋ค. ์๊น ๊ฒฐ๊ณผ๋ฌผ์์ ๋ดค๋ ๊ฒฐ๊ณผ์ฐฝ ๋งํฌ๊ฐ result/ ์ธ๊ฑธ ํ์ธํ ์ ์๋ค.
- views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import ContentForm
from .models import Content
# Create your views here.
def index(request):
if request.method == "POST": #2 ์์ฒญ์ด POST ํ์์ผ ๋
form = ContentForm(request.POST)
if form.is_valid():
content_form = form.save(commit=False) # ๋ฐ๋ก ์ ์ฅํ๋ ๊ฒ์ ๋ฐฉ์ง
content_form.save()
return redirect('result/')
else:
messages.error(request, "error")
return redirect('main/index.html')
else: #1 index.html ํ์ด์ง์ ์ ์ํ๋ฉด ์ฌ๊ธฐ๊ฐ ๋จผ์ ์คํ๋๋ค.
form = ContentForm()
context = {
'form': form
}
return render(request, 'main/index.html', context)
def result(request):
result_list = Content.objects.all()
context = {
'result_list' : result_list
}
return render(request, 'main/result.html', context)
runserver ๋ช ๋ น์ด๋ก ์๋ฒ๋ฅผ ์คํํด ์ ์ํด๋ณด๋ฉด index view๊ฐ ๋น ํผ์ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค. ๋น ํผ์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ์ ํ๊ณ ์ ์ถ = save ๋๋ฅด๊ฒ ๋๋ฉด POST ์์ฒญ์ด ๋ฐ์ํ๊ฒ ๋๋ค. POST ์์ฒญ์ด๋ผ๋ ๊ฒ์ ์ฒ์ ๋ค์ด๋ด์ ์ฐพ์๋ณด์๋ค.
- POST
HTTP ๋ฉ์๋ ์ค ํ๋์ธ POST๋ ํด๋ผ์ด์ธํธ(์ฌ์ฉ์)๊ฐ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ฌ์ฉ๋๋ค.
์ฃผ๋ก ํผ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์ถํ๊ฑฐ๋ ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋๋ค.
POST ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ๋ทฐ ํจ์์์ request.method == "POST" ์กฐ๊ฑด์ ์ฌ์ฉํด ๊ตฌ๋ถํ๋ค.
index ๋ทฐ๊ฐ ์ด POST ์์ฒญ์ ์ฒ๋ฆฌํด์ ์ฌ์ฉ์์๊ฒ ๋ฐ์ ํผ์ด ์ ํจํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ result/ ๊ฒฐ๊ณผ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธํ๊ฒ ๋๋ค.
- ๋ฆฌ๋ค์ด๋ ํธ (redirect)
์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ(์ฌ์ฉ์)์๊ฒ ๋ค๋ฅธ URL๋ก ์ด๋ํ๋๋ก ์ง์ํ๋ ๊ฒ์ ๋งํ๋ค. redirect ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
views.py ์์ ์๋ ์ฝ๋์์ return redirect ('result/') ์ด๋ ๊ฒ ๋์ด ์์ผ๋ ์ด๋ ์ฌ์ฉ์๋ฅผ result/ URL๋ก ์ด๋์ํค๋ ๊ฑธ ์๋ฏธํ๋ค. ๊ทธ๋์ save๋ฅผ ๋๋ฅด๋ฉด ๊ฒฐ๊ณผ ํ์ด์ง์ธ result/๋ก ์ด๋ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
- views.py ํ๋จ๋ถ
def result(request):
result_list = Content.objects.all()
context = {
'result_list' : result_list
}
return render(request, 'main/result.html', context)
views.py ํ๋จ๋ถ์ ์๋ ํจ์๋ฅผ ๋ณด๋ฉด ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ๋ชจ๋ content ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์์ result_list ์ ์ ์ฅํ๊ฒ ๋๊ณ ์ด๊ฑธ context์ ๋ด๋๋ค.
- result.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if result_list %}
{% for result in result_list %}
<p>{{result.content}}</p>
{% endfor %}
{% endif %}
</body>
</html>
context์ ๋ด์์ result.html๋ก ๋ ๋๋ง ํ๊ฒ ๋ผ์ ๊ฒฐ๊ณผ ํ์ด์ง์ ๋์ด๊ฐ๋ฉด ์ง๊ธ๊น์ง ์ ๋ ฅํ๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ด ๋ณด์ฌ์ง๊ฒ ๋๋ ๊ฒ์ด๋ค.
save๋ฅผ ๋๋ฅด๊ณ ๊ฒฐ๊ณผ ํ์ด์ง๋ก ๋์ด๊ฐ๊ฒ ๋๋ฉด ํฐ๋ฏธ๋์ ์ด๋ ๊ฒ ๋ก๊ทธ(๋ผ๊ณ ํด์ผ๋๋..>?)๊ฐ ๋ฌ๋ค. result๋ก ๋์ด๊ฐ๋ฉด POST ์์ฒญ์ด ๋จ๊ณ ๋ค์ content ๋น ํผ ํ์ด์ง๋ก ๊ฐ๊ฒ ๋๋ฉด GET์ด ๋จ๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด GET์ ๋ฌด์์ผ๊น?
- GET
GET ์ญ์ HTTP ๋ฉ์๋ ์ค ํ๋๋ก ํด๋ผ์ด์ธํธ(์ฌ์ฉ์)๊ฐ ์๋ฒ๋ก๋ถํฐ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋ ์ฌ์ฉ๋๋ค.
GET ์์ฒญ์ ์ฃผ๋ก ์น ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๊ฑฐ๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉ๋๋ค๊ณ ํ๋ค.
์ฃผ๋ก ํ์ด์ง ์กฐํ, ๊ฒ์, ๋ฆฌ์์ค ์์ฒญ ๋ฑ์ ์ฌ์ฉ๋๋ค๊ณ ํ๋ค.
content ๋น ํผ์ ๋ค์ ๋ถ๋ฌ์ค๊ธฐ ์ํด GET ์์ฒญ์ด ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก ์ดํดํ๋ค.
- Github ๋งํฌ