당신은 멋쟁이, 우리는 장고쟁이~

0%

Django Forms 10편 - Django 에서 폼만들기 3

The Template


이제 직접적으로 template 에 html 폼을 그려주기 위해서, name.html 파일을 생성해 줍니다.


지난 포스팅에서 views.py 에서 {'form': form} 이라는 컨텍스트를 name.html 파일로 전달하였으므로,



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from django.http import HttpResponseRedirect
from django.shortcuts import render

from .forms import NameForm

def get_name(request):
# 만약 이것이 POST 요청이라면, 폼 데이터를 처리할 필요가 있습니다
if request.method == "POST":
# 폼 인스턴스를 생성하고, 요청으로부터 받아온 데이터로 채웁니다
form = Nameform(request.POST)
# 유효한 데이터인지 검사합니다
if form.is_valid():
# form.cleaned_data 안에 있는 데이터를 요구사항에 맞게 처리합니다.
# ...
# 새로운 URL 로 리다이렉트 시켜줍니다.
return HttpResponseRedirect('/thanks/')
# 만약 GET 이나 다른 method 의 요청을 받으면, 비어있는 폼을 생성합니다.
else:
form = NameForm()
return render(request, 'name.html', {'form': form})



템플릿에 있는 name.html 에서 아래와 같이 이라고 출력하면, 폼이 출력 됩니다.

1
2
3
4
5
<form action="/your-name/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>


<form></form><input> 태그들을 제외한, 폼에 필요한 모든 필드들과 그 속성들은 이 HTML 마크업 언어로 자동으로 풀려져서 표시됩니다.



FORM and CSRF (CROSS SITE REQEUST FORGERY)


Form 과 Cross Site Request Forgery Protection

Django 는 사이트간 요청 위조에 방어할수 있는 기능을 쉽게 사용할수 있는 형태로 제공합니다.

폼이 POST 로 CSRF 보호가 활성화 되어 있을때, csrf_token 탬플릿 테그를 위의 예시처럼 꼭 써주어야만 합니다.


이 CSRF 보호 태그는, 자동으로 붙여지지 않기 때문에, 태그를 HTML 마크업에 붙여주어야 합니다.

1
{% csrf_token %}


HTML5 와 브라우저 유효성


*인풋 타입과 브라우저 유효성 *

만약 여러분들의 폼이, URLField, EmailField 혹은 integer Field 같은 필드들을 포함하고 있으면,

Django 는 URL, email 그리고 숫자 HTML5 입력 타입들을 사용할것 입니다.

기본값으로, 브라우저들은 이런 필드들을 위해 그들만의 검증 방식을 적용할수 있고, 그것은 Django 의 유효성 검증 방식보다 더 깐간할수 있습니다.


이 동작을 비활성화 시키고 싶다면, form 태그 안에 novalidate 속성을 설정 하거나,

혹은, TextInput 과 같은 다른 widget 을 필드에 사용해 주면 됩니다.



폼의 개념


Django 는 Django 폼으로 표현된 웹폼을 가지고 있을수 있습니다.

이 폼은 뷰로 프로세스가 되고, HTML 으로 렌더가 됩니다.


이것이 Django 폼을 시작하기 위해서 필요한 컨셉입니다만, form Framework 은 사용할것이 굉장히 많습니다. 위에 설명된 기본적인 동작만 잘 이해하면, 폼 시스템의 다른 기능들도 이해할 준비가 될것입니다. 그리고, 추가 기본 동작 방식에 대해서도 배울수 있습니다.