출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

이번에는 forms.py, 그리고 form이란 것이 정확히 뭔지에 대한 궁금증을 풀어보도록 할 것이다.

 

나도 처음에 Django를 배울때 form이라는 것이 무엇인지 정확히 이해를 못했다. 이 form을 통해 사용자가 아이디와 비밀번호를 제출하고 이를 적용시키는 것은 이해가 됐지만, 그럼에도 불구하고 이 forms.py가 무엇을 정확히 어떻게 해주는지 헷갈렸다.

 

우선 다음의 그림을 보자:

출처: <https://developer.mozilla.org/ko/docs/Learn/Server-side/Django/Forms>

위의 다이어그램은 forms 의 데이터 흐름을 잘 나타내준다. 이를 해석해보면 다음과 같다:

 

  1. 사용자가 form이 있는 페이지를 호출한다
  2. 만약 사용자가 이 페이지를 첫 호출한것이라면, 아무것도 제출되지 않은 빈 상태의 form을 만들어 사용자에게 보여준다.
  3. 여기서 이제 사용자가 form을 제출하면 form이 있는 페이지를 다시 호출하게 되는 것인데,
  4. 이때 사용자는 페이지를 첫번째로 호출하는 것이 아닌 데이터를 통과시키면서 form을 제출하는 것이므로,
  5. 이 데이터를 검증하고,
  6. 데이터가 유효할 경우, 이 데이터를 통과시켜 그에 따른 action을 취하고, 성공 URL로 redirect한다
  7. 데이터가 유효하지 않을 경우 에러 메세지와 함께 form이 있던 페이지로 다시 보낸다.

이것은 form의 역할을 정확하게 설명해주는 것이다. 그렇다면 이제 forms.py에 설정하는 것들을 무엇을 하는 역할일까?

우선, Djangoforms.py를 잠깐만 살펴보자:

from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

from .models import *

class CreateUserForm(UserCreationForm):
	class Meta:
		model = User
		fields = ['username', 'email', 'password1', 'password2']

보면 django.contrib.auth.forms에서 UserCreationFormimport해서 새로운 CreateUserForm이라는 class를 만들었다. 우리는 이 CreateUserForm이라는 클래스를 이용해서 나중에 views.py에서 사용자를 만드는 함수에 적용할 수 있다.

 

developer.mozilla.org에서는 Form의 기능을 다음과 같이 얘기한다:

 

"Form 클래스는 form내 field들, field 배치, 디스플레이 widget, 라벨, 초기값, 유효한 값과 (유효성 체크이후에) 비유효 field에 관련된 에러메시지를 결정한다. Form 클래스는 또한 미리 정의된 포맷(테이블, 리스트 등등) 의 템플릿으로 그자신을 렌더링하는 method나 (세부 조정된 수동 렌더링을 가능케하는) 어떤 요소의 값이라도 얻는 method를 제공한다."

 

즉, forms.py에 있는 클래스들은, 사용자가 제출하는 데이터를 통과시켜주는 매개체로 작동한다고 생각하면 될 듯 하다.