[pinterest clone (12)] DB 정보 접근
웹 프로그래밍

[pinterest clone (12)] DB 정보 접근

728x90
반응형

duckracoon.tistory.com/41

 

[pinterest clone (11)] POST 통신을 이용한 DB 데이터 저장

1. Send POST data 2. Receive POST data 3. Save DB 1 hello_world.html {% extends 'base.html' %} {% block content %} Hello World List {% csrf_token %} {{ text }} {% endblock %} hello_world_input 받아..

duckracoon.tistory.com

앞서 만들면서 생기는 객체들이 db에 계속 쌓일텐데 그걸 모두 긁어와서 display하는 과정을 알아보자.


views.py

from django.shortcuts import render

from accountapp.models import HelloWorld


def hello_world(request):

    if request.method == "POST":
        temp = request.POST.get('hello_world_input')

        new_hello_world = HelloWorld()
        new_hello_world.text = temp
        new_hello_world.save()

        hello_world_list = HelloWorld.objects.all()
        return render(request, 'accountapp/hello_world.html', context={'hello_world_list': hello_world_list})


    else:
        hello_world_list = HelloWorld.objects.all()
        return render(request, 'accountapp/hello_world.html', context={'hello_world_list': hello_world_list})

HelloWorld.objects.all() : HelloWorld의 모든 데이터 다 긁어올수 있다. 

 

hello_world.html

{% extends 'base.html' %}

{% block content %}

    <div style="border-radius: 1rem; margin: 2rem; text-align:center;">
        <h1 style="font-family: 'Dancing Script', cursive;">
            Hello World List
        </h1>
        <form action="/account/hello_world/" method="post">
            {% csrf_token %}
            <div>
                <input type="text" name="hello_world_input">
            </div>
            <div>
                <input type="submit" class="btn btn-primary" value="POST">
            </div>
        </form>

        {% if hello_world_list %}
        <h1>
            {{ hello_world_list }}
        </h1>
        {% endif %}
    </div>

{% endblock %}

 

요런식으로 나온다.

 

하나씩 뽑아주려면 for문을 쓰면 될것.

{% extends 'base.html' %}

{% block content %}

    <div style="border-radius: 1rem; margin: 2rem; text-align:center;">
        <h1 style="font-family: 'Dancing Script', cursive;">
            Hello World List
        </h1>
        <form action="/account/hello_world/" method="post">
            {% csrf_token %}
            <div>
                <input type="text" name="hello_world_input">
            </div>
            <div>
                <input type="submit" class="btn btn-primary" value="POST">
            </div>
        </form>

        {% if hello_world_list %}
            {% for hello_world in hello_world_list %}
            <h4>
                {{ hello_world.text }}
            </h4>
            {% endfor %}
        {% endif %}
    </div>

{% endblock %}

 


f5를 눌러 새로고침해보면 글을 추가하지않았는데도 리스트가 계속 쌓이는걸 볼 수 있다.

이유:

views.py를 보면 리턴을 할때 POST가 오면 작업을 브라우저가 반복하더라도 계속 똑같이 저장을 한다.

POST를 완료한 이후에는 GET을 되돌아가서 작업을 반복하지 않아도되는 상황을 만들거다.

 

 

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse

from accountapp.models import HelloWorld


def hello_world(request):

    if request.method == "POST":
        temp = request.POST.get('hello_world_input')

        new_hello_world = HelloWorld()
        new_hello_world.text = temp
        new_hello_world.save()

        hello_world_list = HelloWorld.objects.all()
        return HttpResponseRedirect(reverse('accountapp:hello_world'))

    else:
        hello_world_list = HelloWorld.objects.all()
        return render(request, 'accountapp/hello_world.html', context={'hello_world_list': hello_world_list})

accountapp 안에 있는 hello_world로 재접속하라는 response를 보내준다.

 

이제 새로고침해도 아래 똑같은 포스트 안생긴다.

728x90
반응형