강의 정리/Django REST Framework(12)
-
DRF JWT 인증
전 강의에서 배운 Django의 기본 Token은 랜덤 문자열로 구성되어 있기에 Token을 통해서 어떤 유저인지 알 수 없고, Token 유효기간도 없어서 위험하다. 이러한 기본 Token의 단점을 JWT를 통해서 보완해보자. Token 인증과 JWT 인증 DRF의 기본 Token 단순한 랜덤 문자열 각 User와 1:1 매칭 유효기간이 없습니다. Token을 받았을 때 어떤 유저의 Token인지 알 수 없음 >>> import binascii >>> import os >>> binascii.hexlify(os.urandom(20)).decode() 'ec90f85721dc5f75b6eec47d199e3476c301633f' JWT 데이터베이스를 조회하지 않아도, 로직만으로 인증이 가능 -> JWT 만..
2022.07.15 -
DRF Token인증 적용하기
DRF에서 지원하는 인증 rest_framework.authentication.SessionAuthentication 웹 프론트엔드와 장고가 같은 호스트를 쓴다면, 세션 인증을 사용할 수 있습니다.(nginx 등 활용) 외부 서비스 / 앱에서 세션 인증을 사용할 수 없다. // 안드로이드나 React등에서 사용할 수 없다. rest_framework.authentication.BasicAuthentication 외부 서비스/앱에서 매번 username/password를 넘기는 것은 보안상 위험하고, 하면 안된다. rest_framework.authentication.TokenAuthentication 초기에 username/password로 Token을 발급받고, 이 Token을 매번 API요청에 담아서..
2022.07.15 -
DRF Pagination
DRF에서 기본 지원하는 페이징 방식 PageNumberPagination page/page_size 인자를 통한 페이징 처리 LimitOffsetPagination offset/limit 인자를 통한 페이징 처리 PageNumberPagination page_size 미지정 상황을 위해, 디폴트 지정이 필요 settings.py 내 REST_FRAMEWORK = {"PAGE_SIZE": 10} 를 통해 전역 설정 PageNumberPagination을 상속받아 page_size 설정 from rest_framework.paginationimport PageNumberPagination class MyPageNumberPagination(PageNumberPagination): page_size = 10..
2022.07.14 -
DRF Authentication과 Permission
인증 유입되는 요청을 허용 / 거부하는 것을 결정하는 것이 아니라, 단순히 인증 정보로 유저를 식별하는 것입니다. Authentication : 유저 식별(ex: 업주인지 고객 유저인지) Permissions : 유저의 리소스에 대한 각 요청에 대한 허용/거부(ex: 특정 유저만 글 쓰기) Throttling : 특정 유저가 일정 시간 동안에 허용할 최대 요청 횟수(ex: 글 쓰기 제한) 인증 프로세스 유저 식별 해당 유저가 리소스에 대한 어떤 액션을 취할 때 허용할 것인지, 거부할 것인지 허용된다면, 특정 리소스에 대한 요청 횟수를 넘어서지 않는지 인증 처리 순서 매 요청 시마다 APIView의 dispatch(request) 호출 APIView의 initial(request) 호출 APIView의 p..
2022.07.14 -
DRF Serializer를 통한 유효성 검사 및 저장
Serializer의 생성자 Serializer는 Django Form과 컨셉 / 사용법이 유사하나, 생성자 차이 # django/forms/forms.py class BaseModelForm: def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=ErrorList, label_suffix=None, empty_permitted=False, instance=None, use_required_attribute=None): class Form(BaseForm): pass Form에서는 인자로 data와 files, instance를 받는다. # rest_framework/serialize..
2022.07.14 -
From과 Serializer 관점에서 DRF 비교
Serializer / ModelSeializer 데이터 변환 / 직렬화 지원 querySet / Model객체 Native Python 데이터타입, JSON/XML Django의 Form / ModelForm과 유사 유효성 검사와 유효성 검사에 통과한 값들을 데이터베이스에 저장 시켜줌 Serializer는 뷰 응답을 생성하는 데에 범용적이고 강력한 방법을 제공 ModelSerializer는 Serializer 생성을 위한 Shortcut 특징 비교 Form / ModelForm HTML 입력폼을 위한 입력에 대한 유효성 검사 주로 Create / Update에 대한 처리에서 활용 → 장고 admin에서 활용 CreateView / UpdateView CBV를 통한 뷰 처리 → 단일 뷰 Serialize..
2022.07.13