DRF list & detail view

Codren·2021년 5월 16일
0

Django 실전

목록 보기
9/12

Section 1. List view API

1. Form  vs  Model Form

  • 일반 Form - 사용자가 직접 지정해야 함
class PostForm(forms.Form):
	title = forms.CharField()
	content = forms.CharField(widget=forms.Textarea)
  • Model Form - 모델을 지정하면 자동으로 폼 필드 생성해 줌
class PostForm(forms.ModelForm):
	class Meta:
		model = Post
		fields = ['title', 'content'] # '__all__' 설정시 전체 필드 추가



2. Serializer

  • django의 Model form 역할을 수행
  • 모델 인스턴스 데이터에 대해 유효성 검사를 수행하거나 Json, XML 형식으로 주고 받을 수 있도록 포맷을 변환하는 것 (직렬화)
  • 프로젝트 폴더 안에 serializers.py 생성
  • Product model 에서 모든 속성 필드를 반환하겠다 라는 의미

fields = '__all__'	# json 파일로 통신할 때 key 값이 될 속성들 지정



3. Model Form vs  Serializer



4. view 생성

  • generics.GenericAPIView - API 비지니스 로직 수행을 위한 View 제공 class
  • mixins.ListModeMixin - view 기능 중에서 list(목록)를 처리하는 class

serializer_class = ProductSerializer 	# 직렬화 지정
def get_queryset():			# GenericAPIView의 get_queryset() 오버라이딩 (아래의 list함수에서 get_querryset() 수행)
def get():				# API 요청이 GET 방식인 경우 get() 오버라이딩
return self.list(request, *args, **kwargs)  # ListModeMixin의 list()함수 수행 (자동으로 목록 처리 및 출력 수행하는 함수)



5. GenericAPIView

  • ListAPIView 가 이미 class 로 정의되어 있어서 해당 class 를 사용하거나 참고하여 사용하면 됨



6. URL 파싱

  • path('api/product/', ProductListAPI.as_view()) 추가
  • REST 의 /product/   GET(READ) 방식



7. REST Response 결과

  • DRF 에서 제공하는 api 동작 확인 결과 창
  • GET /api/product/   REST 요청이 오면 아래와 같은 json 파일 형식으로 REST 응답함



Section 2. Detail view API

1. view 생성

  • generics.GenericAPIView - API 비지니스 로직 수행을 위한 View 제공 class
  • mixins.RetrieveModeMixin - view 기능 중에서 detail(상세보기)를 처리하는 class
    (상품 목록(list)에서 해당 상품에 마우스를 가져다대면 popover 기능 제공을 위함)

serializer_class = ProductSerializer 	# 직렬화 지정
def get_queryset():			# GenericAPIView의 get_queryset() 오버라이딩 (아래의 retrieve함수에서 get_querryset() 수행)
def get():				# API 요청이 GET 방식인 경우 get() 오버라이딩
return Product.objects.all().order_by('id') # 모두 가져오는 이유는 URI의 pk 값과 일치하는 행을 찾기 위해서 
return self.list(request, *args, **kwargs)  # RetrieveModeMixin의 retrieve()함수 수행 (자동으로 pk 값을 갖는 행 추출 및 출력 함수)



4. URL 파싱

  • path('api/product/<int:pk>/', ProductDetailAPI.as_view()) 추가
  • REST 의 /product/{product_id}   GET(READ) 방식



5. REST Response 결과

  • DRF 에서 제공하는 api 동작 확인 결과 창
  • GET /api/product/1   REST 요청이 오면 아래와 같은 json 파일 형식으로 REST 응답함

0개의 댓글