Django

[Django] 5. Sending and Retrieving form data

개발자 뭄뭄 2022. 9. 2. 17:38
반응형

1. Form이란?


  • 사용자(client)가 서버에 HTTP 요청을 보내는 가장 편리한 방법
  • 핵심은 어디로(action) 어떤 방식으로(method) 보낼지?
    • action : 입력 데이터가 전송될 ‘유효한’ URL. 기본값은 “#” 이며, 현재 form 이 있는 페이지의 URL로 보내진다.
    • method (소문자로 작성하여도 되나, 관습적으로 대문자로 작성한다.)
      • GET : 주소창 뒤에 Query string 을 사용하여 전달된다.
      • POST : 데이터를 숨겨서 전달한다.

2. Form 의 특성


  • <input type=””> : type 속성에 따라 동작 방식이 달라진다. 기본값은 “text”
  • 핵심 속성은 name 이다.
    • name에 설정된 값을 서버로 전송하고, 서버는 input 태그를 식별하는데 사용한다.
    • GET 방식에서는 ?key=value&key=value/ 형식으로 데이터를 전달한다.

3. Sending the data


HTTP Request methods
  • HTTP : HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜(규약)
  • 통신을 위해서 사전에 만든 규약
  • Web에서 이루어지는 모든 데이터 교환의 기초
  • 리소스에 대한 행위를 정의한다. ( 어떤 행동을 수행하기를 원하는지? )
    • GET
      • 서버로부터 정보를 조회할 때 사용한다.
      • 데이터를 서버로 전송할 때 Query String Parameters 를 통해 전송한다.
      • 데이터는 URL에 포함되어 서버로 보내진다.
<form action="#" method="GET">
        <label for="message"> Throw </label>
        <input type="text" id="message" name="message"> 
        <!-- 라벨을 지정했기 때문에 맞춰주기 위해 id를 사용했다. -->
        <input type="submit">
    </form>

작동시에 URL에 변화만 있을 뿐이다.

💡
그렇다면 어디로 데이터를 보내야 할까?

4. Retrieving the data


<form action="/catch/" method="GET">
        <label for="message"> Throw </label>
        <input type="text" id="message" name="message"> 
        <!-- 라벨을 지정했기 때문에 맞춰주기 위해 id를 사용했다. -->
        <input type="submit">
    </form>

catch 라는 url과 함수를 만들어서, 데이터를 받아보게 하려고 한다.

그렇다면, 데이터는 어떻게 가져올 수 있을까?

💡
모든 요청 데이터는 request에 들어있다.
# articles/views.py

def catch(request):
	print(request)
	print(type(request))
	print(request.GET)
	print(request.GET.get('message'))
	return render(request, 'catch.html')
#print(request)
<WSGIRequest: GET '/catch/?message=%EC%B6%95%EA%B5%AC%EA%B3%B5'>

#print(type(request))
<class 'django.core.handlers.wsgi.WSGIRequest'>

#print(request.GET)
<QueryDict: {'message': ['축구공']}>

#print(request.GET.get('message'))
축구공

즉. request.GET 은 딕셔너리 형태로 정보를 받기 때문에,

request.GET.get(’name’) 을 적용한다면, 데이터를 받을 수 있다!


Uploaded by N2T

반응형