이전 스테이지에서 게시물을 올릴 수 있는 페이지를 만들었습니다. 하지만 내용을 입력하고 게시버튼을 눌러도 실제로 글이 등록되지는 않습니다.
방금 만든 게시글 올리기 페이지가 아닌, 관리자 모드에서 글을 직접 생성할 때는 데이터가 제대로 등록됩니다. 문제는 우리가 만든 게시글 올리기 페이지가 제대로 작동하지 않는다는 건데요. "방금 쓴 내용물로 게시글을 등록해줘"라고 요청하는 부분은 만든적이 없기 때문입니다. 단지 입력창만 들어간 아무 기능이 없는 빈 페이지만 만든 상태죠.
실제로 동작하게 하려면 위와 같은 흐름을 고려해야합니다. 단지 페이지를 디자인하고 버튼을 넣는게 아니라, "글을 등록해라"라는 기능을 가진 행동이 취해져야 하는 것이고, 이런 작업은 html, css가 아닌 파이썬을 통해 수행됩니다.
게시버튼이 클릭되었다는 것을 인지해야한다.
클릭이 되었다면, 작성된 글쓴이, 비밀번호, 제목, 내용 정보를 가져와야 한다.
가져온 정보를 DB에 등록해줘야 한다.
이때 로직이란, 방금 설명한 해야할 일처럼 무언가 기능적으로 처리해야하는 부분을 말합니다.
new_feed.html<div class="form_box"><form method="POST">{% csrf_token %}<h3>게시물 올리기</h3><input class="input_field" type="text" placeholder="글쓴이의 이름은?" name="author"><br><input class="input_field" type="password" placeholder="글 비밀번호" name="password"><br><input class="input_field" type="text" placeholder="제목을 입력해주세요." name="title"><br><textarea class="textarea_field" placeholder="내용을 입력해주세요." name="content"></textarea><br><button class="write_button">게시</button></form></div>
views.pydef new_feed(request):if request.method == 'POST': # 폼이 전송되었을 때만 아래 코드를 실행new_article = Article.objects.create(author=request.POST['author'],title=request.POST['title'],text=request.POST['content'],password=request.POST['password'])# 새글 등록 끝return render(request, 'new_feed.html')
갑자기 글이 추가되기 시작합니다. 원래는 빠져있던, 작성하지 않았던 로직을 파이썬을 통해 만들어줌으로써 가능해진 일입니다.
이 로직을 다시 살펴볼까요?
views.pydef new_feed(request):if request.method == 'POST': # 폼이 전송되었을 때만 아래 코드를 실행new_article = Article.objects.create(author=request.POST['author'],title=request.POST['title'],text=request.POST['content'],password=request.POST['password'])# 새글 등록 끝return render(request, 'new_feed.html')
views.py 안에 있는 new_feed가 게시물 쓰기 페이지를 담당중
원래는 페이지를 표시하는 return render()
기능만 있었음
이제는 POST 요청이 들어오면 Article.objects.create()
를 실행하는 로직이 추가됨
html은 어떤 원리로 작성되었는지 살펴봅시다.
이렇게 name으로 이름을 지정하여 보내진 데이터는 views.py의 new_feed 함수에서 request.POST[name]
을 통해 읽어들일 수 있습니다. 장고가 없다면 훨씬 어렵고 복잡하게 데이터를 가져와야합니다. 그러나 우리는 장고 덕분에, name만 원하는 이름으로 맞춰주면 쉽게 데이터를 읽을 수 있습니다. 이 방식에는 엄청난 원리나 철학이 담겨져 있지 않습니다. 단지 그렇게 하도록 장고에서 미리 규칙을 정했을 뿐 입니다.