"0. 장고 form 작성"의 두 판 사이의 차이
(→개요) |
(→개요) |
||
14번째 줄: | 14번째 줄: | ||
* 재활용 할 수 있다. | * 재활용 할 수 있다. | ||
* 에러메시지를 자동으로 띄워준다. 탬플릿에 <nowiki>{{ form.error }}</nowiki> 변수를 띄워주면 잘못된 입력이라든가 빈 입력이라든가에 대한 피드백을 해준다. | * 에러메시지를 자동으로 띄워준다. 탬플릿에 <nowiki>{{ form.error }}</nowiki> 변수를 띄워주면 잘못된 입력이라든가 빈 입력이라든가에 대한 피드백을 해준다. | ||
− | * 서로 다른 데이터타입은 유효성 | + | * 서로 다른 데이터타입은 유효성 검사(에러검사)도 달리해야 하는데, 이러한 과정을 자동으로 처리해주어 적극 권장한다. |
== 정의 == | == 정의 == |
2021년 6월 25일 (금) 10:43 판
1 개요
장고에선 장고 form이라는 개념을 제공해 데이터 입력의 편의성을 제공한다. 장고에서 제공하는, 데이터를 입력받는 기능이다. html을 자동 렌더링해준다. 폼을 통해 DB로의 입력을 제어할 수 있다.
폼을 만들고 html(탬플릿)에 {{form}} 이라고만 입력하면 자동으로 html 언어로 변환해 보여준다.
장고는 모델에 따라 적절한 형태의 폼을, 안전하게 처리해주는 기능을 갖고 있다.
모델의 제약 외에 폼에서의 제약을 설정하는 등 상세한 변형이 가능하여 많이 이용되는 개념이다.
1.1 폼의 장점
- 재활용 할 수 있다.
- 에러메시지를 자동으로 띄워준다. 탬플릿에 {{ form.error }} 변수를 띄워주면 잘못된 입력이라든가 빈 입력이라든가에 대한 피드백을 해준다.
- 서로 다른 데이터타입은 유효성 검사(에러검사)도 달리해야 하는데, 이러한 과정을 자동으로 처리해주어 적극 권장한다.
2 정의
폼을 사용하기 위해선 폼 클래스를 정의해야 한다.
일반적으로 앱의 forms.py 안에 정의한다.
from django import forms
from .models import 모델 # 폼을 적용할 모델을 불러온다.
class 폼이름(forms.ModelForm): # 특별한 경우가 아닌 한 일반폼이 아닌, 모델폼을 사용한다.
class Meta:
model = 모델 # 사용할 모델
fields = ['필드1', '필드2',...] # 폼으로 입력할 필드를 입력해준다.
# fields에 '__all__'을 따옴표까지 함께 넣어주면 모든 필드를 가져오라는 명령이 된다.
2.1 폼필드 제약
클래스 변수로 모델의 속성명 = forms.CharField(label='보여질이름', max_length=100)
따위로 폼 안에서 입력의 제한조건을 걸 수도 있지만, 기왕 모델을 작성하는 거, 모델에서 제한조건을 완성하고 폼에선 보여지는 대상과 방식에 집중하자.
폼 필드에 일일이 제약을 걸 수는 없으니, 모델에서 제약을 걸고 폼에서는 이를 사용하기만 한다.
어차피 모델에서 알아서 폼필드를 만든다.(모델은 유효성검사를 하고, 입력 자체를 막진 못한다. 그럴 때 사용하면 된다. 혹은 HTML 코드에서 입력의 제약을 걸 수도 있는데, 각 폼마다 제약을 거는 게 아니라 한번에 {{form}} 형식으로 불러올 거라면 이곳에서 제약을 걸어주어야 한다.)
2.2 위젯
각 폼 필드는 <input type='text'>와 같은 HTML 위젯을 갖고 있다. 각 폼필드마다 기본적인 위젯을 갖고 있다.
폼필드 안의 옵션에 속성=forms.CharFiedl(....., widget={'class'='클래스값', ...}) 와 같이 옵션을 추가해주면 된다.(역시, HTML에서 입력할 수 있기 때문에 분업을 하는 경우 굳이 사용하진 않는다.)