1. GET 전송
[main/urls.py]
path('parameter/', views.get_post),
위와 같이 urls.py를 수정해줍니다.
"http://DOMAIN/main/parameter/?id=1234"와 같은 요청이 들어올 경우 "get_post" 함수로 파라미터를 전달하게 됩니다.
[main/views.py]
def get_post(request):
if request.method == 'GET':
id = request.GET['id']
data = {
'data': id,
}
return render(request, 'main/parameter.html', data)
"views.py"를 위와 같이 수정하면 if 문을 통해 GET요청인지 POST요청인지 확인을 하여 이후의 작업들을 진행하게 하도록 소스를 구성하였습니다.
여기서 request.GET['id']는 "GET"요청으로 들어온 id라는 파라미터를 받는 구문입니다.
이후 data딕셔너리에 파라미터를 담아 "parameter.html"로 전송하게끔 구현되어 있습니다.
[template/main/parameter.html]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ data }}
</body>
</html>
위처럼 "parameter.html" 파일을 만들고 "{{ data }}" 템플릿 코드를 사용하여 "views.py"에서 전송한 데이터를 출력합니다.
[결과]
지금까지 "GET_Method_TEST"라는 문자열이 urls.py -> views.py -> parameter.html을 거쳐 정상적으로 출력되는 것을 확인 할 수 있습니다.
2. POST 전송
[post.html]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function send() {
alert("send");
document.getElementById("contents").submit();
}
</script>
</head>
<body>
<form id="contents" name="contents" method="post" action="{% url 'main:parameter' %}">
{% csrf_token %}
id : <input name="id" type="text">
pw: <input name="name" type="text">
<button type="button" onclick="send();">전송</button>
</form>
</body>
</html>
"templates/main/post.html" 파일을 생성하여 위처럼 소스코드를 만들어 줍니다.
form 태그의 action 부분을 설명드리자면 "main앱의 path이름이 parameter인 것을 찾아가라는 의미입니다."
이 소스는 "id"와 "name"을 파라미터로 받아 javascript를 이용하여 "send" alert창을 띄우고 POST로 전송됩니다.
[main/urls.py]
path('parameter/', views.get_post, name='parameter'),
path('post/', views.post_view),
위처럼 "path('parameter/', views.get_post, name='parameter')," 이 부분에 "parameter"라는 path의 이름을 지어줍니다.
"path('post/', views.post_view)," 이 부분은 입력 페이지를 호출하기 위한 path 입니다.
[main/views.py]
def post_view(request):
return render(request, 'main/post.html')
def get_post(request):
if request.method == 'GET':
id = request.GET['id']
data = {
'data': id,
}
return render(request, 'main/parameter.html', data)
elif request.method == 'POST':
id = request.POST['id']
name = request.POST['name']
data = {
'id': id,
'name': name
}
return render(request, 'main/parameter.html', data)
"post_view"라는 함수는 사용자 입력 페이지를 호출하기위한 함수입니다.
"get_post"함수의 "else if request.method == 'POST'" 이하 구문은 POST요청이 들어왔을 시 동작할 코드들이 존재하면
"request.POST['id'], request.POST['name']"을 통하여 사용자가 입력한 "id"와 "name"을 전송받습니다.
이후 진행상황은 GET요청과 동일하게 data 딕셔너리에 "id", "name" 이라는 이름으로 "parameter.html"로 데이터를 전송합니다.
[templates/main/parameter.html]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ data }}<br />
post_id = {{ id }}<br />
post_name = {{ name }}<br />
</body>
</html>
기존 "GET요청"으로 받은 데이터는 출력이 되지 않을 것이며 "POST 요청"으로 넘어온 데이터들은 한줄씩 출력될 것입니다.
[사용자 입력]
"main/post/"로 요청을 하여 사용자 입력페이지에 접속하여 위와 같이 폼을 입력하고 전송을 누릅니다.
[결과]
이처럼 POST 데이터를 송수신 할 수 있습니다.
'프로그래밍 > Django' 카테고리의 다른 글
[Django] 8. Mariadb / Mysql DB 연동(데이터베이스) (717) | 2020.12.23 |
---|---|
[Django] 7. 파라미터 전송(정규표현식, URL 페이지 번호) (711) | 2020.12.16 |
[Django] 5. 테스트 홈페이지 만들기(project, app, views, urls, 환경설정) (738) | 2020.12.14 |
[Django] 4. 우분투서버 Django + Nginx + Gunicorn 연동 (553) | 2020.09.22 |
[Django] 3. Mysql 설치 및 DB,Table 생성, 접속 계정 권한부여 (743) | 2020.08.28 |