티스토리

devDiary
검색하기

블로그 홈

devDiary

seowoolog.tistory.com/m

dltjdn 님의 블로그입니다.

구독자
2
방명록 방문하기

주요 글 목록

  • [django-rest-framework] (16) JWT 인증 Token 인증 VS JWT 인증 DRF Token 단순한 랜덤 문자열로 각 User와 일대일 매칭 유효기간 X Token만으로 어떤 유저인지 알 수 없고 Token에 매칭된 User가 누구인지 데이터베이스에서 찾아야만 알 수 있다 JWT ( JSON Web Token ) 토큰 자체에 User 데이터를 담을 수 있어 데이터베이스를 조회하지 않아도 User 인증이 가능하다 포맷 : "헤더.내용.서명" → Header와 payload(내용) : base64인코딩 / signature(서명) : Header와 payload를 조합하고 비밀키로 서명한 후 base64 인코딩 서버에서 토큰 발급 시에 비밀키로 서명을 하고 발급 시간 및 유저 정보 등을 저장 비밀키로 서명 했기에 위조변조가 불가능 ( 비밀키를 잘 .. 공감수 0 댓글수 0 2022. 2. 14.
  • [django-rest-framework] (15) Token 인증 DRF에서 지원하는 인증 rest_framework.authentication.SessionAuthentication 웹 프론트엔드와 장고가 같은 호스트를 쓴다면 세션 인증을 사용할 수 있다 하지만 외부 서비스/앱 ( ex. react, 안드로이드 앱)에서는 사용할 수 없다 rest_framework.authentication.BasicAuthentication 매 요청 시마다 인증을 수행한다 매번 username/password를 넘기는 것이 보안상 위험하다 rest_framework.authentication.TokenAuthentication 매 요청 시마다 인증을 수행한다 초기에 username/password로 Token을 발급받고, 이 Token을 매 API 요청에 담아 보내 인증 처리 Tok.. 공감수 0 댓글수 0 2022. 2. 14.
  • [django-rest-framework] (14) Throttling / Cache Throttling이 필요한 이유 자신이 자신만의 API 서버를 만들고 클라이언트를 만들었을 때는 필요없을 수 있는 기능이다 그러나, 만약 오픈 API 서비스를 한다면 다른 개발자나 유저에 대해서 호출 횟수를 제한할 필요가 있다 기본 사용 용어 Rate : 지정 기간 내에 허용할 최대 호출 횟수 Scope : 각 Rate에 대한 별칭 Throttle : 최대 호출 횟수를 넘은지를 판단하는 로직이 구현된 클래스 기본 제공 Throttle AnonRateThrottle 인증된 요청 : 제한X 비인증된 요청 : IP 단위로 횟수 제한 디폴트 scope : 'anon' → anon라는 이름으로 rate를 지정 UserRateThrottle 인증된 요청 : 유저 단위로 횟수 제한 비인증된 요청 : IP 단위로 횟.. 공감수 0 댓글수 0 2022. 2. 13.
  • [django-rest-framework] (13) Pagination DRF에서 기본 지원하는 페이징 방식 PageNumberPagination : page , page_size 인자를 통한 페이징 처리 LimitOffsetPagination : offset, limit 인자를 통한 페이징 처리 PageNumberPagination page_size 미지정 상황을 위해, 디폴트 지정이 필요 # settings.py REST_FRAMEWORK = { "PAGE_SIZE" : 10, } 특정 APIView에서 page_size을 custom 하게 지정 ← PageNumberPagination 상속받아 page_size 설정 from rest_framework.pagination import PageNumberPagination class MyPageNumberPaginatio.. 공감수 0 댓글수 0 2022. 2. 7.
  • [django-rest-framework] (12) Filtering / Ordering Filtering 목록조회 APIView에서는 조건에 따른 필터링이 필요 ex. QuerySet의 filter/exclude 필터링에 의한 인자 참조 APIView @api_view self.request.user self.request.user self.request.GET self.request.GET self.request.query_params(GET과 동일) request.query_params (GET과 동일) self.kwargs 함수의 키워드 인자 Generic Filtering / Ordering SearchFilter → search_fields (반드시 필요) 하나의 속성 참조 search_fields 기본(아무것도 쓰지X) : 포함된 문자열 search ex. search_field.. 공감수 0 댓글수 0 2022. 2. 7.
  • [django-rest-framework] (11) Authentication / Permission Authentication / Permission / Throttiling 구분 1. Authentication(인증) : 유저 식별 2. Permission(허가) : 유저 식별 후, 해당 유저의 요청에 대한 허용/거부 결정 3. Throttling : 허용된 유저에 대해, 일정 기간 동안에 허용할 최대 요청 횟수 인증(Authentication) 처리 순서 1. 매 요청 시마다 APIView의 dispatch(requet) 호출 2. APIView의 initial(request) 호출 3. APIView의 perform_authentication(request) 호출 4. request의 user속성 호출( rest_framework.request.Request 타입 ) 5. request의 _aut.. 공감수 0 댓글수 0 2022. 2. 7.
  • [django-rest-framework] (10) Serializer 통한 유효성 검사 & 저장 form 생성자 : data인자를 먼저 입력받고 뒤쪽에 instance인자를 입력받는다 serializer 생성자 : instance인자를 먼저 입력받고 뒤쪽에 data인자를 입력받는다 Serializer 사용하는 이유 1. 데이터직렬화 사용하기위해 → instance 인자에 모델 객체 or QuerySet 넘겨주면 된다 2. 입력값에 대한 유효성 검증 및 검증에 통과한 값들을 가져오고 DB에 저장하는 form 같은 역할 → data 인자에 입력값 넘겨주면 된다 Serializer에 data= 인자가 주어지면 .is_valid()가 호출되고 나서야 아래의 속성에 접근할 수 있다 .initial_data 필드 .validated_data를 통해 유효성 검증에 통과한 값들이 .save() 시에 사용된다 c... 공감수 0 댓글수 0 2022. 2. 7.
  • [django-rest-framework] (9) Form vs Serializer 특징 비교 Form/ModelForm HTML 입력폼을 통한 입력에 대한 유효성 검사 주로 Create/Update에 대한 처리에서 활용 장고 admin 커스텀 할 때 활용 CreateView/UpdateView CBV를 통한 뷰 처리 → 단일 뷰 Serializer/ModelSerializer Serializer는 뷰 응답을 생성하는 데 범용적이고 강력한 방법 제공 ModelSerializer는 Serializer 생성을 위한 Shortcut 데이터 변환 및 직렬화 지원 ( ex. JSON 포맷 ) Web API 포맷 (주로 JSON 포맷) 입력에 대한 유효성 검사 List/Create 및 특정 Record에 대한 Retrieve/Edit/Delete 등 에서 활용 APIView를 통한 뷰 처리 → 단.. 공감수 0 댓글수 0 2022. 1. 28.
  • [django-rest-framework] (8) Renderer Renderer 같은 Endpoint에서 요청받은 타입에 맞춰, 다양한 응답포맷을 지원 Content-Type헤더 , URL Captured Values 의 방법을 통해 Renderer 지정 가능 기본 지원되는 Renderer JSONRenderer ( 디폴트 지정 ) json.dumps를 통한 JSON 직렬화 media_type : application/json | format : json BrowsableAPIRenderer ( 디폴트 지정 ) self-document HTML 렌더링 media_type : text/html | format : api TemplateHTMLRenderer ※ API 서버라도 경우에 따라 HTML 응답 받을 수 있음 ( 모든 응답을 JSON으로 받지 않아도 됨 ) 지정.. 공감수 0 댓글수 0 2022. 1. 28.
  • [django-rest-framework] (7) ViewSet / ModelViewSet ViewSet list/create → 하나의 url 필요 detail/update/partial_update/delete → 하나의 url 필요 》 최소 2개의 클래스 기반 뷰 필요 ViewSet은 2개의 url에 대한 구현을 하나의 클래스에서 지원해줌 # views.py from django.shortcuts import get_object_or_404 from rest_framework import viewsets from rest_framework.response import Response class PostViewSet(viewsets.ViewSet): def list(self, request): qs = Post.objects.all() serializer = PostSerializer(qs.. 공감수 0 댓글수 0 2022. 1. 22.
  • [django-rest-framework] (6) mixins / generics APIView DRF에서 지원하는 mixins CreateModelMixin ListModelMixin RetrieveModelMixin UpdateModelMixin DestroyModelMixin Method별로 로직 연결 from rest_framework import generics from rest_framework import mixins # GenericAPIView가 무조건 맨 뒤에 와야함 class PostListAPIView(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView): queryset = Post.objects.all() serializer_class = PostSerializer def get(self, requ.. 공감수 0 댓글수 0 2022. 1. 21.
  • [django-rest-framework] (5) APIView / @api_view DRF의 2가지 기본 뷰 APIView : 클래스 기반 뷰 @api_view : 함수 기반 뷰를 위한 장식자 두 가지 다 View에 여러 기본 속성 부여 1. renderer_classes : 직렬화 class 다수 rest_framework.renderers.JSONRenderer : JSON직렬화 rest_framework.renderers.TemplateHTMLRenderer : HTML 페이지 직렬화 2. parser_classes : 비 직렬화 class 다수 rest_framework.parsers.JSONParser : JSON 포맷 처리 rest_framework.parsers.FormParser rest_framework.parsers.MultiPartParser 3. authentica.. 공감수 0 댓글수 0 2022. 1. 21.
  • [django-rest-framework] (4) View에서의 JSON 응답 장고 기본 View에서의 HttpResponse JSON 응답 모든 View는 HttpResponse 타입의 응답을 해야만 한다 장고 기본에서 HttpResponse JSON응답을 할 수 있는 2가지 종류가 있다 직접 json.dumps 를 통해 직렬화된 문자열을 획득하여 HttpResponse를 통해 응답 위의 과정을 합쳐 JsonResponse 라는 HttpResponse를 상속받은 클래스 지원 (내부적으로 DjangoJSONEncoder가 디폴트 지정) DRF Response 활용한 HttpResponse JSON 응답 qs = Post.objects.all() serializer = PostSerializer(qs, many=True) from rest_framework.response impor.. 공감수 0 댓글수 0 2022. 1. 20.
  • [django-rest-framework] (3) Serializer / ModelSerializer / JSON 직렬화 ( Serializer ) 모든 프로그래밍 언어의 통신에서 데이터는 문자열로 표현되어야만 한다 직렬화에 대해 항상 비직렬화 규칙도 갖고 있어야 원래 객체 복원 가능하다 송신자 : 직렬화 (Serialize) = 객체를 문자열으로 변환하여 데이터 전송 수신자 : 비직렬화 (deserialize) = 수신한 문자열을 다시 객체로 변환하여 활용 직렬화 포맷의 종류 각 언어에서 모두 지원 : JSON, XML 등 특정 언어에서만 지원 : Pickle ( 파이썬 ), 직접 만든 커스텀 포맷 등 → 타 언어로 전달했을 때 비직렬화 에러 발생 보통의 웹 : GET 요청에 대해선 HTML 포맷으로 응답 / POST 요청에 대해선 application/x-www-form-urlencoded 나 multipart/.. 공감수 0 댓글수 0 2022. 1. 20.
  • [django-rest-framework] (2) DRF설치 / REST API 설계 / HTTPie 사용법 django-rest-framework (DRF)설치 pip install djangorestframework~=3.11.0 settings.py 에 있는 INSTALLED_APPS에 "rest_framework" 추가 urls.py에 있는 urlpatterns에 path('api-auth/', include('rest_framework.urls')) 추가 → django.contrib.auth의 login,logout view 사용 한 모델(ex. Post) 에 대한 API 서비스 제공할때 기존 url 설계 새 포스팅 내용 등록하고 확인 응답 → /post/new/ 주소로 POST 요청 포스팅 목록 및 검색 응답 → /post/ 주소로 GET 요청 10번 포스팅 내용 응답 → /post/10 주소로 G.. 공감수 0 댓글수 0 2022. 1. 19.
  • [django-rest-framework] (1) API서버 / REST / django-rest-framework API 서버란? 앱/웹 서비스를 만드는 개발자들이 이용하는 데이터(주로 json 포맷 사용) 위주의 서비스 - http 프로토콜에서 클라이언트가 서버에 html형식 요구하는 대신 스타일과 로직을 제외한 순수 데이터(xml, json)만 요구 시간이 지나도 호환성 유지해야 함 - 앱은 유저가 원할 때 업데이트 / 웹은 자동으로 항상 최신버전 사용하게 됨 - 유저층이 사용하는 버전 다양해 API에도 버전 개념 있음 ex) /api/v1/posts/, /api/v2/posts/ ( 요청 url에 지정 ) REST ( Representional State Transfer ) 아키텍처 스타일 프로토콜에 독립적 But, 일반적인 REST 구현에 HTTP 사용 RESTful API의 디자인 원칙 리소스(ex 장고 모.. 공감수 0 댓글수 0 2022. 1. 18.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.