target : action에서 지정한 스크립트 파일이 현재나 다른 위치에서 열리도록 한다.
accept-charset : form 전송에 사용할 문자 인코딩 지정
Django Form
장고의 가장 큰 장점 중 한가지 이다. Model 클래스와 유사하게 Form 클래스를 정의한다.
Form 클래스는 Django Form 관리 시스템의 핵심으로 다음과 같은 역할을 한다.
설명
form.is_valid()
폼의 입력값이 올바른지 확인
form.is_bound
사용자 입력값이 있는지 확인
form.data
사용자가 입력한 폼 데이터
form.cleaned_data
검사를 통과한 폼 데이터
form.as_p()
<p></p> 태그로 폼 출력
form.as_ul()
<ul></ul> 태그로 폼 출력
form.as_table()
<table></table> 태그로 폼 출력
입력 폼 생성 : as_table() ,as_p(), as_ul() 기본제공
유효성 검증(Validation)
검증에 통과한 값을 dictionary type으로 제공(cleaned_data)
Form vs Model Form
# app/forms.pyfrom django import formsfrom.models import Post# Form (일반 폼)classPostForm(forms.Form): title = forms.CharField() content = forms.CharField(widget=forms.Textarea)# Model Form (모델 폼)classPostForm(forms.ModelForm):classMeta: model = Post fields = ['title','content']
Form : 직접 필드 정의, 위젯 설정이 필요하다
Model Form : 모델과 필드를 지정하면 모델폼이 자동으로 field를 생성한다.
class Meta 는 폼을 만들기 위해서 어떤 모델이 쓰여야하는지 장고에 알려주는 구문이다.
기본적인 유효성 검사는 값의 유무이다. forms.ValidationError 로 예외발생 유무를 처리한다.
해당 필드의 clean_<fieldname>() 메소드를 추가해 검증된 입력값을 반환하거나 옳지 않은경우 ValidationError를 발생시킬 수 있다.
from django import formsfrom django.core.exceptions import ValidationErrorclassPostForm(forms.Form): title = forms.CharField()defclean_title(self): title = self.cleaned_data['title']if(len(title)<10):raiseValidationError(_('제목의 길이가 너무 짧습니다. 10글자이상 입력해주세요.'))return title
# app/models.pyfrom django import formsfrom django.db import models# validationdefmin_length_validator(value):iflen(value)<3:raise forms.ValidationError('글자수가 너무 짧습니다. 3글자 이상 입력해주세요.')# Create your models here.classMarketing(models.Model): title = models.CharField(max_length=200, validators=[min_length_validator]) str_date = models.DateTimeField() end_date = models.DateTimeField() ins_name = models.CharField(max_length=20) created_at = models.DateTimeField(auto_now_add=True)# 해당 레코드 생성시 현재 시간 자동저장 mod_name = models.CharField(max_length=20) updated_at = models.DateTimeField(auto_now=True)# 해당 레코드 생성시 수정 시간 자동저장def__str__(self):return'%s'% (self.title)