form 태그는 사용자가 입력한 데이터를 받아 처리할 수 있다. Django에서 form태그를 활용하여 입력받은 데이터를 처리하여 출력해보자.
form 태그의 구성
form 태그는 아래와 같이 구성되어있다. <form> </form>안에서 입력받은 데이터들은 action 속성에서 정의한 주소로 보내진다. 또한 form 태그는 기본적으로 method가 GET으로 설정되어있다.
GET : 데이터를 조회하기 위한 명령이며 조회할 데이터를 URL에 포함시켜 전달한다.
POST : 리소스를 생성하고 변경하기 위한 명령이며 데이터를 body안에 포함시켜 전달한다.
label의 for과 input의 id의 값을 같게하여 label과 input이 짝을 지을 수 있도록한다.
input의 type에는 다양한 종류가 있으며 여기서는 문자열을 입력받는 text를 사용하였다.
사용자에게 입력받은 데이터가 전달될 때 name에 정의된 값이 key가되어 전달된다.
<form action="personal/" method="GET">
<div>
<label for="name"></label>
<input type="text" name="name" id="name">
</div>
<div>
<label for="age"></label>
<input type="text" name="age" id="age">
</div>
<input type="submit" value="제출">
</form>
입력받은 정보 추출하기
위에서 사용자가 이름과 나이를 입력했다고 하자. 해당 데이터는 personal/ 이라는 URL로 전달이 되며 urls.py에 정의되어 있으며 해당 URL에 해당하는 views.personal에서 요청을 받아 처리를 한다.
아래는 views.py에 정의된 personal 함수이다. 이 함수에서는 요청받은 데이터를 추출하는 기능을 한다.
request의 값은 다음과 같다. ?뒤에 &로 구분하여 key=value쌍으로 이루어져있다.
<WSGIRequest: GET '/app1/personal/?name=kim&age=24'> |
위의 request를 GET으로 추출하면 다음과 같다. python에서 딕셔너리 형태와 유사하다. 이를 get()을 통해 value를 가져와 각각의 변수에 저장한다.
<QueryDict: {'name': ['kim'], 'age': ['24']}> |
# views.py
def personal(request):
name = request.GET.get('name')
age = request.GET.get('age')
context = {
'name':name,
'age':age,
}
return render(request, 'personal.html', context)
출력하기
personal.html로 전달된 변수들을 출력하기 위해서는 DTL을 사용한다. 두 개의 중괄호 안에 전달받은 변수를 넣어 변수에 저장된 값을 출력하도록 한다.
<h1> {{ name }} </h1>
<h1> {{ age }} </h1>
'WEB' 카테고리의 다른 글
[Django 07] CRUD (0) | 2021.03.11 |
---|---|
[Django 06] Model (0) | 2021.03.10 |
[Django 04] URL 분리하기 (0) | 2021.03.09 |
[Django 03] 템플릿 상속 (0) | 2021.03.08 |
[Django 02] Django Template Language(DTL) (0) | 2021.03.08 |