본문 바로가기

728x90
반응형

Dev./Django.

(8)
[DRF] Custom Permission- URL based permission URL-based permission URL 패턴에 따라 사용자에게 다른 권한을 부여하는 방식을 의미한다. URL dispatcher Django는 일반적으로 URLconf 파일을 가지고 있다. URLconf 파일은 각 app단의 urls.py 모듈에서 정의된다. 이 파일에는 urlpatterns 변수를 정의하고, 이 변수는 URL 패턴을 리스트로 나타내며, 각 패턴은 path() 또는 re_path() 함수를 사용하여 정의한다. Django는 URLconf 파일에 URL 패턴을 정의하고 각 패턴에 대해 어떤 view 함수나 클래스를 호출할지를 지정해 매칭시킨다. URL dispatcher는 HTTP요청이 들어올 때마다 적절한 url에 연결해주는 기능을 의미한다. 이러한 기능을 기반으로 특정 URL 패턴..
[DRF] Custom Permission 생성- BasePermission permission_classes DRF는 API View에서 요청을 처리하기 전에 실행되는 인증 및 권한 검사를 위해 permission_classes 속성을 제공한다. 보안을 위해 클라이언트의 요청이 특정 권한을 가지고 있는지 확인하는 데 사용되며 APIView 클래스에서 상속받아 사용할 수 있다. 클래스의 종류 DRF는 몇가지 기본 클래스를 제공하고 직접 커스텀 하여 권한 클래스 사용할 수도 있다. AllowAny : 모든 요청에 대해 인증 없이 접근을 허용 IsAuthenticated : 인증된 사용자만 접근을 허용 IsAdminUser : 관리자 권한을 가진 사용자만 접근을 허용 IsAuthenticatedOrReadOnly : 인증된 사용자는 모든 HTTP 메소드를 사용할 수 있지만, 인증되지..
[DRF] Serialization / Deserialization 동작 변경 - to_internal_value와 to_representation Serialization과 Deserialization Serialization과 Deserialization은 사용자와 클라이언트가 API에서 데이터를 읽고 쓸 수 있도록 API에서 데이터를 표현하고 전송하는 데 사용되는 기능이다. Serialization 직렬화 Serialization은 데이터 객체를 JSON 또는 XML 등의 포맷으로 변환하는 과정으로 DRF에서는 Serializer 클래스를 사용하여 객체를 직렬화할 수 있다. Serializer는 ModelSerializer, Serializer 및 다른 유형의 Serializer 클래스를 포함하는 다양한 유형이 있고 Serializer를 사용하면 모델 인스턴스를 쉽게 JSON, XML 또는 다른 포맷으로 변환할 수 있다. Deserializat..
[Django] ManyToMany 모델 인스턴스 생성 및 삭제하기- add, clear ManyToManyField Django에서 ManyToManyField란 다대다(N:M) 관계를 나타내는 필드이다. 이 필드를 사용하여 두 개의 모델 사이에 여러 개의 관계를 설정할 수 있습니다. ManyToManyField는 관계의 중간 테이블은 두 모델의 기본키(primary key)를 참조한다. class Author(models.Model): name = models.CharField(max_length=100) books = models.ManyToManyField('Book') class Book(models.Model): title = models.CharField(max_length=200) authors = models.ManyToManyField(Author) 예시 테이블을 하나 가져..
[Django] Django에서 fixture 사용 Fixture 일반적으로 데이터베이스의 초기 데이터나 테스트 데이터를 쉽게 생성하고 로드할 수있게 해주는 도구이다. 데이터베이스에서 내보낸 JSON 또는 XML 형식의 데이터를 이용하여, 다른 데이터베이스에 데이터를 이전하거나, 초기 데이터를 적용하는 데 사용할 수 있다. Dump & Load fixture는 dumpdata와 loaddata 관리 명령을 사용하여 작업할 수 있다. dumpdata 명령은 현재 데이터베이스에서 데이터를 추출하고, loaddata 명령은 이러한 데이터를 사용하여 데이터베이스를 채워준다. dumpdata 현재 데이터베이스에 있는 데이터들을 json형식으로 dump 떠 JSON 파일로 추출할 수 있다. $ python manage.py dumpdata APP_NAME.MODEL..
[Django] JSON WebToken - Simple JWT JSON WebToken 유저를 인증하고 식별하고 JSON 형식의 데이터를 안전하게 전송하기 위한 토큰 기반의 인증 시스템이다. 특징 세션과 다르게 서버가 아닌 클라이언트에 저장되어 메모리, 스토리지 등 세션을 관리했던 서버의 부담이 줄어든다. 토큰 자체에 데이터가 담겨있어 판별가능하다. 상태를 유지하지 않아 Stateless하다. 인증 방식 유저가 로그인 요청을 한다. 서버 단에서 유저(클라이언트)에게 유일한 토큰을 발급한다. 클라이언트는 서버 측에서 전달받은 토큰을 쿠키나 스토리지에 저장해두고, 서버에 요청할 때마다 해당 토큰을 HTTP 헤더에 포함시켜 전달한다. 서버는 전달받은 토큰을 검증하고 요청에 응답한다 토큰에 요청한 사람의 정보가 담겨있으므로 DB조회 없이 유저 식별이 가능하다. JWT 구조..
[Django] Django Middleware Middleware https://docs.djangoproject.com/en/4.1/topics/http/middleware/ Django의 Request/ Response 처리에 연결되는 프레임 워크로 입출력을 특정한 app단이 아니라 전역적으로 변경하기 위한 가볍고 낮은 수준의 플러그인 시스템이다. Http Request가 들어오면 미들웨어를 거쳐 url에 매핑된 view로 보내고 Response역시 미들웨어를 거친다. Django settings.py 미들웨어간의 유기적인 관계가 설정되어 있기 때문에 등록하는 순서가 중요하다. HTTP Request는 위에서부터 순차적으로 미들웨어가 적용되며 Response를 반환할 때는 아래에서 위로 미들웨어가 적용된다. MIDDLEWARE = [ "djang..
[Django] DRF로 pagination 적용하기 -PageNumberPagination 페이지네이션(Pagination) 구글에 DRF pagination으로 검색을 하면 많은 결과가 한번에 보여지는 것이 아니라 다음과 같이 페이지별로 보여진다. 결과가 약 만개라고 가정했을 때 매번 전체 결과를 가져오면 속도가 굉장히 느리고 유저입장에서는 불편할 것이다. 따라서 전체 데이터에서 지정된 값 만큼 데이터를 나눠서 가져오는 방식을 페이지네이션 이라고 한다. http://127.0.0.1:8000/user/?page=2 DRF에서는 PageNumberPagination, LimitOffsetPagination, CursorPagination 와 같은 페이지네이션 기능을 제공하고 있다. 이 글에서는 실제 사용을 한 PageNumberPagination로 페이지네이션을 적용하는 것에대해서만 작성하려고..

728x90