TIL no.51 - Django - Basic - 15 - Sending form data

박준규·2019년 10월 21일
0

Django

목록 보기
19/30

Django - Basic - 14에서 form을 생성하고
화면에 띄워주기까지 완료했습니다.

이제 사용자가 form에 입력한 데이터를 전송해서
다른 화면에 보여주는 방법을 포스팅하겠습니다.


1. Overview

  1. create페이지에서 유저로부터 데이터를 받습니다.
  2. 입력받은 데이터를 어떻게 사용할지 views.py에서 결정합니다.
  3. url mapping을 해줍니다.
  4. confirm 페이지에서 데이터를 받아 화면에 띄웁니다.

2. form 을 이용해 데이터 주고받기

#second/views.py
from django.shortcuts import render
from django.http import HttpResponseRedirect

from second.models import Post
from .forms import PostForm


def list(request):
    context = {
        'items': Post.objects.all()
    }
    return render(request, 'second/list.html', context)


def create(request):
    form = PostForm()
    return render(request, 'second/create.html', {'form': form})


def confirm(request):
    form = PostForm(request.POST)  # request의 POST 데이터들을 바로 PostForm에 담을 수 있습니다.
    if form.is_valid(): # 데이터가 form 클래스에서 정의한 조건 (max_length 등)을 만족하는지 체크합니다.
        return render(request, 'second/confirm.html', {'form': form})
    return HttpResponseRedirect('/create/')  # 데이터가 유효하지 않으면 되돌아갑니다.

request의 POST데이터를 받는 이유는
form의 method를 'post'로 정해줬기 때문입니다.
form data를 받아 validation check를 하고
부합하는 데이터면 form data를 confirm 템플릿에 넘겨주고 렌더링합니다.

HttpResponseRedirect는 특정 url로 돌아가라는 응답을 보내는 메서드입니다.
만약, 부합하는 데이터가 아니라면 다시 create 템플릿으로 가게합니다.

#second/confirm.html

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Second</title>
</head>
<body>
    <h4>{{ form.title.value }}</h4>
    <p>{{ form.content.value }}</p>
</body>
</html>

받은 form 데이터의 각 속성의 value들을 보여줍니다.
즉, 유저가 form에 입력한 데이터를 보여줍니다.

그리고 url mapping을 합니다.

from django.urls import path

from . import views

urlpatterns = [
    path('list/', views.list, name='list'),
    path('create/', views.create, name='create'),
    path('confirm/', views.confirm, name='confirm'),
]

마지막으로 Django - Basic - 14에서 create.html을 만들때,
form action의 값을 비워놨으니 confirm이 받을수 있도록 수정합니다.

#second/create.html

<form action="{% url ‘confirm’ %}" method="post">
    {% csrf_token %}
    {{ form }}
    <button type="submit">제출</button>
</form>

runserver를 해서 create템플릿에서 값을 입력하고 버튼을 누르면
confirm페이지로 넘어가 유저가 입력한 데이터를 화면에 띄워주는 것을 확인할 수 있습니다.

profile
devzunky@gmail.com

0개의 댓글