[Django] 포스트 작성 페이지 만들기

haremeat·2021년 12월 22일
0

Django

목록 보기
6/16
post-thumbnail
post-custom-banner

테스트 코드 작성

    def test_create_post(self):
        response = self.client.get('/blog/create_post/')
        self.assertEqual(response.status_code, 301)
        soup = BeautifulSoup(response.content, 'html.parser')

        self.assertEqual('Create Post - Blog', soup.title.text)
        main_area = soup.find('div', id='main_area')
        self.assertIn('Create New Post', main_area.text)

/blog/tests.py에 test_create_post() 함수를 만든다.

테스트 코드 내용은 대충

  1. /blog/create_post/라는 URL로 접속하면 포스트 작성 페이지가 열려야 한다.
  2. 타이틀은 Create Post - Blog로 되어야 하고
  3. 마지막 메인 영역에는 Create New Post라는 문구가 있어야 한다.

이런 내용들이다.
일단 당장은 페이지를 만들기 전이라 Fail이 뜬다.

CreateView 추가

from django.views.generic import ListView, DetailView, CreateView

class PostCreate(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title', 'hook_text', 'content', 'head_image', 'file_upload', 'category']

/blog/views.py에 CreateView를 상속받아 클래스를 만든다.
model = Post로 post를 사용한다고 선언, 필드명을 리스트로 작성해서 저장한다.

URL 추가

urlpatterns = [
    path('create_post/', views.PostCreate.as_view()),
    (생략)
]

/blog/urls.py에 방금 전 view에 만든 PostCreate 클래스를 사용하도록 추가한다.

템플릿 만들기

{% extends 'blog/base_full_width.html' %}

{% block head_title %}Create Post - Blog{% endblock %}

{% block main_area %}
<h1>Create New Post</h1>
<hr>
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <table>
        {{ form }}
    </table>
    <button type="submit" class="btn btn-primary float-right">Submit</button>
</form>
{% endblock %}

템플릿 폴더 아래에 post_form.html 파일을 만들었다.
보여지는 부분은 본인 취향에 맞게 꾸미면 ㅇㅋ
나는 테스트 코드에 맞게 타이틀을 Create Post - Blog로 지정하고 메인 영역에 Create New Post 문구를 넣었다.

코드를 작성하면서 신기했던 점이 두 가지 있다.

  • 장고는 action부분을 알아서 처리해주기 때문에 따로 url을 지정하지 않아도 된다.
  • {% csrf_token %} 코드를 form 안에 넣는 것만으로 웹 사이트를 CSRF 공격으로부터 보호할 수 있다.

이렇게 작성하고 테스트를 진행하면 현재까지 작성한 모든 테스트를 통과한다.

profile
버그와 함께하는 삶
post-custom-banner

0개의 댓글