본문 바로가기
Web/Django

[Django] 게시판 만들어보기 - Part 5 (Form을 활용한 변형)

by char_lie 2023. 3. 26.
반응형
반응형

Django를 이용하여 게시판을 만드는 과정을 따라가보자.

이 글은 아래 Part 4을 바탕으로 이어지니 참고하자

https://edder773.tistory.com/94

 

[Django] 게시판 만들어보기 - Part 4

Django를 이용하여 게시판을 만드는 과정을 따라가보자. 지난 CRUD의 U인 Update(수정)를 만든 것에 이어 D인 delete(삭제)를 구현해보자 한다. https://edder773.tistory.com/93 [Django] 게시판 만들어보기 - Part 3 D

edder773.tistory.com

지난 CRUD를 이용하여 게시판의 기본 구조까지 만들었다.

이제 여기서 조금 더 변형해서 더 간단하게 Form을 활용하여 내용을 수정해보자


Django Form

  • 지금 django를 이용하여 만든 게시판은 들어오는 모든 요청을 수용
  • But 실제로 서버 운영시에는 비정상 or 악의적인 내용을 거를 필요가 있음
  • 그렇기에 우리는 유효성 검증을 거쳐야하고, django의 Form을 이용하면 작업량과 반복 코드를 줄여 더 쉽게 유효성 검증을 진행 할 수 있게 만들 수 있음

특징

  • Form은 django의 유효성 검사 중 하나로 외부 공격 및 데이터 손상에 대한 방어 수단으로 사용 가능
  • django는 Form과 관련된 유효성 검사를 단순화 · 자동화할 수 있는 기능을 제공 해 더 빠르게 코드를 작성 가능
  • Form과 관련해서 렌더링을 위한 데이터 준비 및 재구성, 데이터 HTML forms 생성, 받은 데이터 수신 및 처리 기능을 django가 제공함

실습

주요한 내용은 직접 만들면서 따라가보자.

Form Class

Model Class를 사용하는 것과 비슷하게 Form class를 사용해보자. Model과 마찬가지로 상속을 통해 선언 받는다는 특징을 갖고있다.

가장 먼저 앱 폴더에 forms. py 폴더를 생성후, Form을 만들고 아래와 같이 내용을 추가해보자

from django import forms

class ArticleForm(forms.Form): #내가 만든 앱 이름은 articles니까 ArticleForm으로 만들었음
    title = forms.CharField(max_length=15)
    content = forms.CharField(widget=forms.Textarea)

앞서 model의 content는 textfield로 작성했지만, form에는 textfield가 존재하지 않아 charfield로 작성해주었다.

textfield와 비슷하게 작동하게 만들기 위해 widget 기능을 사용해 textarea를 만들어줘 textfield와 비슷하게 구성하였다.

이제 Class까지 만들었으면 View에서 내용을 form을 활용할 수 있게 수정해보자

ArticleForm을 사용하기 위해서 먼저 import 해주고, Create에서 활용 할 수 있게 content로 해서 내용을 넣자.

여기까지 했으면 기존 create.html에 들어가서 form을 사용할 수 있게 수정해주어야한다.

기존 ↓

수정 ↓

많은 양이 한번에 줄어 든 것을 확인할 수 있다. 이후 서버를 동작해서 글 쓰기 버튼을 눌러보면

정상적으로 출력되는 것을 볼 수 있다.


Form의 렌더링

위 과정에서 create에 {{form.as_p}}로 사용해서 출력한 것처럼 렌더링 옵션을 지정해 출력할 수 있다.

  • as_p : 각 필드가 p 태그로 감싸져서 렌더링
  • as_ul : 각 필드가 li 태그로 감싸져서 렌더링
  • as_table : 각 필드가 tr 태그로 감싸져서 렌더링

다음 포스팅은 ModelForm 사용으로 이어집니다~

반응형

댓글