# HTML의 Form
지금까지는 사용자로부터 데이터를 받기위해 HTML 파일에서 form을 사용했다.
하지만 HTML의 form은 비정상적이거나, 악의적인 요청을 필터링할 수 없음
→ 유효성 검사가 필요함
# 유효성 검사란?
수집한 데이터가 정확하고 유효한 데이터인지 확인하는 과정
근데, 이걸 우리가 직접 하기엔 입력 값, 형식, 중복, 보안 등 고려할 것이 너무 많다...
그래서 Django가 제공하는 Form을 사용해보자!
# Django Form
사용자 입력 데이터를 수집하고, 처리 및 유효성 검사를 수행하기 위한 도구
→ 유효성 검사를 단순화하고 자동화 할 수 있는 기능을 제공함
# 써보기
앞에서 했던 게시판 만들기에서 이어서..
새로운 글을 쓰는 기능을 form을 이용해서 구현해보자
1. articles 폴더에 forms.py를 생성, 작성해준다.
# articles/forms.py
from django import forms
class ArticleForm(forms.Form):
title = forms.CharField(max_length=10)
content = forms.CharField()
2. articles/views.py에서 수정해준다.
# articles/views.py
def new(request):
form = ArticleForm()
context = {
'form' : form
}
return render(request, 'articles/new.html',context)
3. Template/new.html에서 기존의 HTML form 대신 Django form으로 바꿔준다.
/% new.html의 body중 form부분 %/
<form action="{% url "articles:create" %}" method="POST">
{% csrf_token %}
{{form}}
<input type="submit">
</form>
서버를 열어서 확인 가능

결과값이 너무 안예쁨...
new.html에서 {{form}} 부분을 다음과 같이 바꿔준다.
{{form.as_p}}

줄바꿈이 되는걸 확인할 수 있다.
다음과 같이 label, input 쌍을 특정 HTML 태그로 감싸는 옵션을
Form rendering options라고 하고,
https://docs.djangoproject.com/en/4.2/topics/forms/#form-rendering-options에서 확인할 수 있다.
위의 결과에서 content의 칸이 좀 더 넓어야하지 않을까?
input을 좀 더 키우고 싶은데...
→ Widget을 써보자
# Widgets
HTML 'input' element의 표현을 담당
# articles/forms.py
from django import forms
class ArticleForm(forms.Form):
title = forms.CharField(max_length=10)
content = forms.CharField(widget=forms.Textarea) # 이 부분에 widget이 들어감'BackEnd > Django' 카테고리의 다른 글
| [Django] view 함수 update (0) | 2023.10.04 |
|---|---|
| [Django] ModelForm (0) | 2023.10.04 |
| [Django] HTTP request methods (1) | 2023.09.26 |
| [Django] 게시판 만들기 - 수정 (0) | 2023.09.26 |
| [Django] 게시판 만들기 - 삭제 (1) | 2023.09.26 |