WEB

[Django 05] form 사용하기

mhko411 2021. 3. 9. 21:29
728x90

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