🌈 request 응답 처리
🔥 request ()
🔥 redirect()
🔥 HttpResponse()
🔥 JsonResponse()
1. request()
- request는 url를 통해 form에 입력한 사용자의 데이터를 포함하여 여러 요청된 정보를 갖고 있어요.
- POST방식을 가진 간단한 로그인 form에 id는 'abcd'를 pw는 1234를 입력해 볼까요?
- 터미널에 pirnt(request.POST)를 통해 확인해보면, request가 form에 입력한 데이터를 갖고 있는 것을 확인할 수 있어요.
<!DOCTYPE html>
<html lang="en">
<body>
<h1>hello Index!</h1>
<form action="/" method="POST">
{% csrf_token %} 👈 유해한 공격을 막기위한 장치로 반드시 필요
<div><input type="text" name="id" /></div>
<div><input type="password" name="pw" /></div>
<div><input type="submit" value="login" /></div>
</form>
</body>
</html>
from django.shortcuts import render
def index(request):
print(request.POST)
return render(request, 'index.html')
2. redirect()
- "return render()"가 아닌 "return redirect()"도 유용하게 사용할 수 있는데요, redirect는 해당 함수가 호출되었을 때, 지정해논 경로로 이동시키는 역할을 해요.
- test url('http://127.0.0.1:8000/test/')로 진입하면, '/'로 redirect 하도록 처리해두었기 때문에 root 경로인 메인 페이지로 이동한답니다.
- 즉, test()함수가 실행되면, index()함수가 최종적으로 response되겠네요:)
from django.contrib import admin
from django.urls import path
from main.views import test
urlpatterns = [
path('admin/', admin.site.urls),
path('/', index),
path('test/', test),
]
from django.shortcuts import render
from django.shortcuts import redirect
def index(request):
return render(request, 'index.html')
def test(request):
return redirect('/')
3. HttpResponse()
- 'http://127.0.0.1:8000/test/'로 진입하면, views.py에서 test 함수가 실행되어, HttpResponse('hello HttpResponse')을 return 해보면, 화면에 hello HttpResponse라는 문구가 출력되는 것을 볼 수 있어요.
- HttpResponse()를 통해 페이지에 나타날 content를 전달할 수 있지만, 일반적으로 render를 통해서 html 자체를 전달하는게 더 효과적인 것 같아요.
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request, 'index.html')
def test(request):
return HttpResponse('hello HttpResponse')
4. JsonResponse()
- JsonResponse는 JSON(딕셔너리 형태) 타입을 파라미터로 받아, front쪽에서 다룰 수 있도록 전달해줘요.
- 이에 'http://127.0.0.1:8000/test/'로 진입하면, views.py에서 d라는 변수에 할당된 딕셔너리가 화면에 출력됩니다.
from django.shortcuts import render
from django.http import JsonResponse
def index(request):
return render(request, 'index.html')
def test(request):
d = {'name':'jaewon', 'age':100}
return JsonResponse(d)