Django Form
Django Form
- 프론트엔드와 인터페이싱하기위해 사용
- Form Html을 제공하고, 입력값이 들어오면 validation을 체크하는 역할을 한다.
- 체크에 통과한 값들을 Dict 타입으로 제공한다. (cleaned_data)
적용 순서
1. Forms.py 생성하기
- 해당 파일이 존재하지 않으므로 App안에 직접 생성해준다.
- Form과 DB는 관계가 없으므로 문자열은 CharField와 TextArea로 나누지 않고 동일하게 CharField로 생성한다.
- 단, Widget을 이용해 TextArea로 구분한다.
3) 유효성 검사를 위한 함수 추가
- raise forms.ValidationError를 이용해 유효성 검사를 목적으로 하는 함수를 추가한다.
- 검사하고자 하는 필드에 validators 인자와 함수를 함께 적용한다. (일급 함수이므로 가능)
title = forms.CharField(validatiors = [length_3_validators])
※ 유효성 검사를 위한 함수는 form이 아닌 models에서 생성해준다.
4) View 함수에서 Form 인스턴스 생성
- GET/ POST 요청을 구분해 인스턴스를 생성한다.
- POST 요청에 한해 입력값 유효성을 검증한다.
- is_valid 함수가 실행될 때, form 인스턴스에 등록된 모든 valid 들이 실행된다.
if request.method = 'POST':
form = Form(request.POST, request.FILES) # FILES는 파일 입출력 시에만 적어준다.
if form.is_valid():
'''
Post로 넘어온 값을 저장하는 방법 1
post = Post()
post.title = form.cleaned_data['title']
post.content = form.cleaned_data['content']
post.save()
방법 2
post = Post.objects.create(**form.cleaned_data)
post.save()
'''
return redirect('/good/') # 값이 유효할 시, 이동할 주소
else: # GET 요청이 들어왔을 때
form = Form()
return render(request, 'dojo/post_.html', {
'form' : form,
})
5) 템플릿 생성 및 확인
- csrf 토큰 발행 및 form.as_table로 HTML 폼을 출력한다.
- 위에서 정의한 length_3_validators 오류가 뜬다면, form.as_table에 테이블 형태로 출력된다.
<table>
<form action="" method="post">
{% csrf_token %}
<table> {{ form.as_table }} </table>
<input type="submit />
</form>
</table>
웹 개발자가 알려주는 수익형 블로그 고속 성장 A to Z