먼저, 우리가 구현한 create 함수를 살펴보자.
처음에 request
가 들어오고 이를 처리하고 그 정보를 httpresponse
를 통해 현재 브라우저로 전송하게 된다.
검색엔진에서 django requset를 검색하게 되면 httpresponse object가 뭔지 알 수 있게 된다. Django 홈페이지 바로가기
여기서 우리가 필요한건 HttpRequest.method
이다.
이를 사용해서 create 함수안에 GET 방식으로 들어왔을 때와 POST 방식으로 들어왔을 때 동작을 나눠보자.
...
@csrf_exempt
def create(request):
if request.method == 'GET':
article = '''
<form action="/create/" method="post">
<p><input type="text" name="title" placeholder="title"></p>
<p><textarea name="body" placeholder="body"></textarea></p>
<p><input type="submit"></p>
</form>
'''
return HttpResponse(HTMLTemplate(article))
...
GET은 이전 코드와 똑같은 방식으로 작동하면 된다.
from django.shortcuts import render, HttpResponse, redirect
from django.views.decorators.csrf import csrf_exempt
nextId = 4
...
elif request.method == 'POST':
title = request.POST['title']
body = request.POST['body']
newTopic = {"id": nextId, "title": title, "body": body}
topics.append(newTopic)
url = '/read/' + str(nextId)
nextId += 1
return redirect(url)
...
공식문건의 HttpRequest.POST
를 사용하여 request의 정보를 추출할 수 있었다. 이 정보들을 topics에 append 했다.
또한, 새로운 글을 생성하자 마자 생성한 글의 상세보기로 바로 이동하기 위해
url을 생성하고 새로운 id값을 부여했다. 이를 django.shortcuts의 redirect
를 사용하여 전달했다. django 홈페이지로 이동