Meme's IT

[Django] Form 본문

BackEnd/Django

[Django] Form

Memez 2023. 9. 27. 11:15

# 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  (0) 2023.09.26
[Django] 게시판 만들기 - 수정  (0) 2023.09.26
[Django] 게시판 만들기 - 삭제  (0) 2023.09.26