[DRF #5] The Complete Guide to Django REST framework

LILO Ghim·2022년 2월 4일
0

12월에 끝냈어야 할, 아니 오늘은 이미 끝났어야 할 유뎀이 ㅠㅠ

생각보다 너무 어렵고!!!
게다가 거의 이태리말인 영어도 한 몫!
기본 한 10분 내외 영상을 한 시간씩 보는 것 같다 흫

목표는 3회 정도 돌리고,
해석본 같이 3회독하고
단원별로 블로깅하고,
디버깅 돌리기였는데, 흫
엄두도 못내고,
단원별로 task를 만들어서 task id로 branch를 따서 push 할 때마다 PR이라도 적으려고 했던 것들의 기록


확실히 얻은 것

git을 자주 쓰게 되니
에러캐쳐로써 생각지 못한 에러를 많이 만나고!
깃 에러는 에러캐쳐에서 따로 정리하기로!

파트장님이 말씀하셨지,
나같은 사람 옆에 있으면 실력 많이 늘거라고
이상한 에러를 많이 만들어내서,,,,,흫


그리고 디버깅은 뭐 눈감고도 하지!


WIP


Level One

[DRF Serializer & Deserializer]

  • Overriding
  • Create, Update
  • .data()
  • serializer.is_valid()
  • serializer.validated_data
  • serializer.save() -> 객체로 저장 -> 쿼리셋으로 불러올 수 있다.

[@api_view]

  • FBV(Function-Based Views)
  • list-create api : 하나의 함수로 GET, POST
  • detail api: 하나의 함수로 GET, PUT, DELETE
  • error 처리 : serializer.errors(POST, PUT), try-except(.DoesNotExist)

[APIView Class]

  • CBV [Class-Based Views]
  • ListCreateView : 2개 method(get, post)
  • DetailView : 3개 method(get, put, delete)

[Serializers Validation]

  • object level validation : multiple fields
    ex) check that description and title are different
  • field level validation : single field within object
    ex) check that specific words have not been used in the body field and in case they've been used

[ModelSerializerClass]

  • serializers.py에서 serializers.Serializer를 사용할 때 설정하였던 Models.py의 모든 필드와 create, update method를 모두 생략할 수 있다.
  • serializers.SerializerMethodField로 없는 컬럼과 값(함수로 정의)을 추가할 수 있음
  • validate는 class 내 함수로 선언

[Nested Relationships]

Foreign key로 연결되어 있는 모델을 serializer를 타고 해당 모델의 컬럼 값으로 추가


Level Two


[The GenericAPIView Class & Mixins, Concrete View Classes]

  • generics. -> queryset, serializer_class 설정
  • generics.ListCreateAPIVIew 의 상속
    -> mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView
  • generics.CreateAPIView(post) 의 상속
    -> mixins.CreateModelMixin -> mixins.
    -> create -> self.perform_create(serializer) -> serializer.save()

[Permissions]

  • User : Superuser(admin), Standard
    [permissions.IsAuthenticatedOrReadOnly] : ReviewCreate -> standard는 리뷰 작성이 안됨
  • permissions.py
    - has_permission
    [IsAdminUserOrReadonly] : Ebook -> standard는 읽기만 가능
    - has_object_permission
    [IsReviewAuthorOrReadOnly] : ReviewDetail -> standard는 PUT 안됨

[Pagination]

(Permission 설정하는 것과 같은 방법)

  • settings에 설정하는 방법
    REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS' : 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE' : 3}

  • pagination.py
    PageNumberPagination 상속받은 class 설정

  • error
    UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class 'ebooks.models.Ebook'> QuerySet.
    -> queryset = Ebook.objects.all().order_by("-id")

profile
킴릴로

0개의 댓글