Study/django

[udemy] - Build a Backend REST API with Python & Django - Beginner 학습 정리

bluebamus 2023. 10. 20.

https://www.udemy.com/course/django-python/?referralCode=3B849741B22196721D94 

 

https://github.com/LondonAppDev/profiles-rest-api

 

GitHub - LondonAppDev/profiles-rest-api: Full source code for our Udemy course: How to build a Backend REST API with Python & Dj

Full source code for our Udemy course: How to build a Backend REST API with Python & Django - Advanced - GitHub - LondonAppDev/profiles-rest-api: Full source code for our Udemy course: How to b...

github.com

 

- 토큰을 발급하는 방법으로 아래와 같이 View를 만들고 Token 클래스를 사용해 생성하는 방법을 가장 많이 사용한다.

# rest_framework/authtoken/views.py
class ObtainAuthToken(APIView):
    def post(self, request, *args, **kwargs):  # post 요청일 때
        # ...
        # 토큰, 생성여부(bool 반환)
        token, created = Token.objects.get_or_create(user=user) # 유저가 있으면 가져오고, 없으면 토큰을 생성한다.
        return Response({'token': token.key})

 

- 이 강좌에서는 ObtainAuthToken를 상속받아 로그인 Token 발급을 수행한다.

class UserLoginApiView(ObtainAuthToken):
    """Handle creating user authentication tokens"""
    renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES

   - renderer_classes는 클래스 변수 혹은 데코레이터로 사용할 수 있다. 뷰나 뷰셋에 대한 렌더러를 지정하는데 사용되며 응답의 콘텐츠 유형을 결정한다.

 

 

- DRF에서 자주 사용되는 데코레이터 

@api_view: 함수 기반의 뷰를 API 뷰로 표시하고 요청/응답 처리를 제공합니다. 뷰에 지원되는 HTTP 메소드를 지정할 수 있습니다.
@permission_classes: 뷰나 뷰셋에 대한 액세스 권한을 지정합니다.
@authentication_classes: 뷰나 뷰셋에 대한 인증 클래스를 지정합니다.
@renderer_classes: 뷰나 뷰셋에 대한 렌더러를 지정하며, 이는 응답의 콘텐츠 유형을 결정합니다.
@throttle_classes: 뷰나 뷰셋에 대한 스로틀 클래스를 지정하며, 이는 API에 대한 요청 속도를 제한합니다.
@parser_classes: 뷰나 뷰셋에 대한 파서를 지정하며, 이는 수신된 요청 데이터를 처리합니다.
@serializer_class: 뷰나 뷰셋에 사용할 직렬화 클래스를 지정합니다.
@detail_route (비권장): 단일 인스턴스에 작용하는 뷰셋에 사용자 정의 작업을 추가합니다.
@list_route (비권장): 전체 쿼리셋에 작용하는 뷰셋에 사용자 정의 작업을 추가합니다.
@action: 특정 HTTP 메소드와 URL 경로를 가진 뷰셋에 사용자 정의 작업을 추가합니다.
@link (비권장): 뷰셋에 기반한 사용자 정의 하이퍼링크 작업을 추가합니다.
@format_suffix_patterns: 뷰나 뷰셋의 URL에 형식 접미사 패턴을 추가합니다.
@cache_response: 뷰나 뷰셋의 응답을 캐시합니다.
@api_view(['GET', 'POST']): 함수 기반 뷰에 직접 지원되는 HTTP 메소드를 지정할 수 있습니다.

 

 - render reference : 

https://wikidocs.net/197563

 

03) DRF 뷰와 뷰셋

[TOC] ## DRF 뷰와 뷰셋 이 섹션에서는 Django REST Framework (DRF)의 뷰와 뷰셋에 대해 알아보겠습니다. DRF의 뷰는 API 엔드포인트의 동작…

wikidocs.net

https://hyun-am-coding.tistory.com/entry/8-Renderers

 

8. Renderers

Renderers TemplateResponse 인스턴스를 클라이언트로 반환하려면 먼저 인스턴스를 렌더링해야 합니다. 렌더링 프로세스는 템플릿과 컨텍스트를 중간으로 표현하여 클라이언트에 제공할 수 있는 최종

hyun-am-coding.tistory.com

https://velog.io/@duo22088/DRF-Renderer-%EB%A5%BC-%ED%86%B5%ED%95%9C-%EB%8B%A4%EC%96%91%ED%95%9C-%EC%9D%91%EB%8B%B5

 

(DRF) Renderer 를 통한 다양한 응답

REST 프레임워크에는 다양한 미디어 유형으로 응답을 반환할 수 있는 여러 내장 렌더러 클래스가 포함되어 있습니다.

velog.io

 

 

 - DEFAULT_AUTHENTICATION_CLASSES는 settings.py의 REST_FRAMEWORK에 직접 정의할 수 있다. 그렇지 않다면 api_settings.DEFAULT_AUTHENTICATION_CLASSES를 사용해 DRF의 기본 설정 값을 가져와 정의할 수도 있다.

# rest_framework/views.py
from django.views.generic import View
from rest_framework.settings import api_settings

class APIView(View):
	...
    authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES
# my_project/settings.py
REST_FRAMEWORK = {
    ...,
    "DEFAULT_AUTHENTICATION_CLASSES": (
        "rest_framework_simplejwt.authentication.JWTAuthentication",
        "rest_framework.authentication.SessionAuthentication",
    ),
}

 

 - reference : 

https://kimdoky.github.io/django/2018/08/11/drf-Settings/

 

Django REST Framework - Settings

on August 11, 2018 under django 10 minute read Django REST Framework - Settings “Namespaces are one honking great idea - let’s do more of those!” “네임 스페이스는 훌륭한 아이디어를 제공합니다. let’s do more of those!” — Th

kimdoky.github.io

https://velog.io/@mynghn/%EC%A0%9C%EB%84%A4%EB%A6%AD-%EB%B7%B0%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-API-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0

 

DRF의 제네릭 뷰(Generic views)를 이용해 API 구축하기

DRF의 제네릭 뷰를 쓸 땐 딱 4가지만 신경 쓰면 된다.

velog.io

https://www.django-rest-framework.org/api-guide/settings/

 

Settings - Django REST framework

 

www.django-rest-framework.org

 

 

 - 강의 후기

   - 딱히 기록을 할만한 내용이 없었다. 너무 많은 부분에 대해 누락을하고 정작 불필요한 항목들에 대한 강좌에 절반에 가까운 강의를 만들어 두었다.

댓글