Shiny Lime Green Star J, [Django] 7์ฃผ์ฐจ. ์žฅ๊ณ  ์Šคํ„ฐ๋””

# Django

  • ํŒŒ์ด์ฌ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ฌด๋ฃŒ ์˜คํ”ˆ์†Œ์Šค ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ

 

 

# ์žฅ๊ณ  ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ๋ฌผ

 

๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ€์ƒํ™˜๊ฒฝ์— ๋“ค์–ด๊ฐ€ ์„œ๋ฒ„๋ฅผ ์—ด์–ด์ค€๋‹ค.
์—ด๋ฆฐ ์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ ๋“ค์–ด๊ฐ„๋‹ค.
content ์ฐฝ๊ณผ ํ•จ๊ป˜ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค.
๋นˆ ์ฐฝ์— ์ž…๋ ฅ์„ ํ•˜๊ณ  save๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ง€๊ธˆ๊นŒ์ง€ ์ž…๋ ฅํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์ด ๋‚˜์˜ค๋Š” ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ๋‹ค.

 

 

# ์žฅ๊ณ  ํ”„๋กœ์ ํŠธ ์„ค๋ช…

  • 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 ๋งํฌ

https://github.com/hanjaehee77/wogml/tree/main/mysite

user-img J
wogml
ํ˜„์žฌ๊ธ€
[Django] 7์ฃผ์ฐจ. ์žฅ๊ณ  ์Šคํ„ฐ๋””
ํ•จ๊ป˜ ๋ณด๋ฉด ์ข‹์„ ํฌ์ŠคํŠธ