장고의 뷰는 크게 함수형 뷰와 클래스형 뷰로 나뉜다.
처음에 장고는 함수형 뷰만 제공했는데 동일한 코드를 사용하지 않도록 템플릿화하여 클래스형 뷰를 추가하였다. 공식 문서에서 밝힌 바와 같이 클래스형 뷰는 기존의 함수형 뷰를 대체하는 것이 아니다. 주로 사용하는 코드를 간결하게 만들어 놓은 것이라 보면 좋을 것 같다. 그렇기 때문에 사용은 편하지만 사용을 위해서는 추가적인 학습이 필요하다.
모든 기능을 일일이 만들어줘야 하는 장고 초기 view
app/views.py
def index(request):
if request.method == 'GET':
response = HttpResponse()
response.write("<h1>Welcome</h1>")
response.write("<p>This is my first Django. </p>")
return response
app/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('index/',views.index,name='index'),
]
자주 사용되는 기능들을 편리하게 사용토록 제공하는 새롭게 추가된 view
app/views.py
from django.views import View
class BaseView(View):
# 메서드명을 get으로 선언시, request가 get일때 실행됨.
# args : 가변인자처리
# kwargs : 키워드인자처리
def get(self, request, *args, **kwargs):
response = HttpResponse()
response.write("<h1>Welcome</h1>")
response.write("<p>This is my first Django. </p>")
return response
app/urls.py
파일명.클래스명.as_view()
사용from django.urls import path
from . import views
urlpatterns = [
path('index2/',views.BaseView.as_view(), name='index2'),
]
이제 설명하는 모든 내용은 클래스형 view
를 사용
request 메서드에 크게 POST,GET,PUT,UPDATE,DELETE 로 나눠진다.
이 중 대표적인 POST와 GET에 대해서 알아보자.
request.GET을 하면 주어진 요청에 대해 딕셔너리형태를 리턴해준다.
사용법 : request.GET.get(key값,없을시 리턴값)
request : http://localhost:8000/test?id=10
from django.views import View
from django.http import JsonResponse
class CustomView(View):
def get(self, request, *args, **kwargs):
# request.GET 은 딕셔너리형태를 가진다.
# 방법1
ID_1 = request.GET.get('id',None)
# 방법2
ID_2 = request.GET['id']
context = {
'id' : ID_1,
}
return JsonResponse({'message':context}, status=200)
request.body 를 하면 주어진 요청 body에 담긴 딕셔너리 형태를 리턴해줌.
사용법 : json.loads(request.body)
import json
from django.views import View
from django.http import JsonResponse
class CustomView(View):
def post(self, request, *args, **kwargs):
data = json.loads(request.body)
# 방법1
ID_1 = data.get('id',none)
# 방법2
ID_2 = data['id']
context = {
'id' : ID_1,
}
return JsonResponse({'message':context}, status=200)
https://walkingplow.tistory.com/68?category=981358
https://devocean.sk.com/blog/techBoardDetail.do?ID=163706