마스터 누누

[Django] lotto - POST 처리 본문

Back-End/Django

[Django] lotto - POST 처리

마스터누누 2017.06.28 19:25

lotto - POST 처리




지난 시간에 폼을 만들었는데, submit를 클릭해도 데이터가 처리되지않았다.

이유는 views/post에 있다.

왜냐하면 같은 url을 모두 lotto/form.html으로 랜딩하게 되어있기 때문이다.

만약 get으로 접근했다면 이와 같은 처리가 맞지만 post는 다르게 처리해야한다.





1
2
3
4
5
6
7
8
9
10
11
from django.shortcuts import render, redirect
def post(request):
    if request.method == "POST":
        form = PostForm(request.POST)
        if form.is_valid():
            lotto = form.save(commit = False)
            lotto.generate()
            return redirect('index')
    else:
        form = PostForm()
        return render(request, "lotto/form.html",{"form": form})
cs


따라서 이를 판별해야한다.

post 내부 함수는 default가 get으로 동작하기 때문에

if 조건문을 이용하여 post로 접근했는지 확인 해야한다.

이를 위해서 request.method를 사용한다. 만약 post로 접근했다면 'post'가된다.

'get'으로 접근했다면 기존의 코드를 그대로 적어준다.


post를 판별했으면 form으로 받은 데이터를 처리해야한다.

PostForm(request.POST)으로 폼 데이터를 가져올수 있는데 이 데이터가 정상적이지 않을수 있으므로

if form.is_valid()로 다시 한번 확인을 거쳐야한다.


만약 제대로 데이터가 들어왔다면 lotto안에 form의 데이터를 가져오는데

commit=False 인자로 데이터 베이스에는 저장하지 않는다.

왜냐하면 generate()를 호출해서 저장하기를 원하기 때문이다.


모든 작업이 완료되었으면 index url로 redirect 시킨다.

redirect의 인자는 url을 하드코딩 하는것이 아니라 url name을 그대로 입력해주면 된다.

redirect도 render와 마찬가지로 from django.shortcuts 안에 있으므로 추가시켜준다.




출처 : 인프런, 파이썬 웹 프로그래밍, Django로 웹 서비스 개발하기

저작자 표시
신고

'Back-End > Django' 카테고리의 다른 글

[Django] sns - 앱 초기화  (0) 2017.06.29
[Django] lotto - 앱 다듬기  (0) 2017.06.28
[Django] lotto - POST 처리  (0) 2017.06.28
[Django] lotto - form 만들기  (0) 2017.06.28
[Django] lotto - MTV 연동하기  (0) 2017.06.28
[Django] lotto - shell을 이용한 장고 관리  (0) 2017.06.28
0 Comments
댓글쓰기 폼