HTML form element를 통해 사용자와 애플리케이션 간의 상호작용(데이터를 보내고 가져오는 방법)을 이해해보자.
throw라는 함수를 통해 데이터를 요청하고 catch 라는 함수를 통해 데이터를 가져오는 연습을 해보자!
action
, method
# urls.py
urlpatterns = [
...,
path('throw/', views.throw),
]
# articles/views.py
def throw(request):
return render(request, 'throw.html')
<!-- templates/articles/throw.html -- >
{% extends 'base.html' %}
{% block content %}
<h1>Throw</h1>
<form action='#' method='#'>
</form>
{% endblock content %}
name
<!-- articles/templates/throw.html -- >
{% extends 'base.html' %}
{% block content %}
<h1>Throw</h1>
<form action='#' method='#'>
<label for="message">Throw</label>
<input type="text" id="message" name="message">
<input type="submit">
</form>
{% endblock content %}
<!-- articles/templates/throw.html -- >
{% extends 'base.html' %}
{% block content %}
<h1>Throw</h1>
<form action='#' method='GET'>
<label for="message">Throw</label>
<input type="text" id="message" name="message">
<input type="submit">
</form>
{% endblock content %}
사용자가 입력 데이터를 전달하는 방법 중 하나로, url 주소에 데이터를 파라미터를 통해 넘기는 것
이러한 문자열은 앰퍼샌드(&)로 연결된 key=value 쌍으로 구성되며 기본 URL과 물음표(?)로 구분된다.
http://host:port/path?key=vlaue&key=value
Query String 이라고도 한다.
정해진 주소 이후에 물음표를 쓰는 것으로 Query String이 시작함을 알린다.
key=value
로 필요한 파라미터의 값을 적다.
=
로 key와 value가 구분된다.파라미터가 여러 개일 경우 ‘&’ 를 붙여 여러개의 파라미터를 넘길 수 있다.
# urls.py
urlpatterns = [
...,
path('catch/', views.catch),
]
# articles/views.py
def catch(request):
return render(request, 'catch.html')
<!-- articles/templates/catch.html -- >
{% extends 'base.html' %}
{% block content %}
<h1>Catch</h1>
<h2>데이터를 받고</h2>
<a href='/throw/'>다시 던지러</a>
{% endblock content %}
<!-- articles/templates/throw.html -- >
{% extends 'base.html' %}
{% block content %}
<h1>Throw</h1>
<form action='/catch/' method='GET'>
<label for="message">Throw</label>
<input type="text" id="message" name="message">
<input type="submit">
</form>
{% endblock content %}
<!-- articles/templates/index.html -- >
{% extends 'base.html' %}
{% block content %}
...
<a href='/throw/'>throw</a>
{% endblock content %}
http://127.0.0.1:8000/catch/?message=데이터
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')
# articles/views.py
def catch(request):
message = request.GET.get('message')
context = {
'message' : message,
}
return render(request, 'catch.html', context)
<!-- templates/articles/catch.html -- >
{% extends 'base.html' %}
{% block content %}
<h1>Catch</h1>
<h2>{{message}}를 받고</h2>
<a href='/throw/'>다시 던지러</a>
{% endblock content %}