Django

· Django
Django에서 인증과 인가는 어떤 과정을 통해서 이루어지는지 살펴보자 Django 3.2와 DRF 및 Session을 기준으로 작성하도록 하겠다. 인증 API요청을 통해 ID/Password등의 검증이 끝나고 django.contrib.auth.login 을 통해 세션을 얻게 된다. 세션 갱신, 유저 Backend확인 및 연결, CSRF Token 갱신(발급) 등을 진행 한다. (일반적으로 django.contrib.auth.backends.ModelBackend를 쓸 것이다.) 끝으로 user_logged_in signal을 보내고 인증이 완료된다. Django에서 기본 구현된 인증 종류중 Cookie를 쓰는 것은 세션이 유일하기 때문에, 세션을 발급 할 경우 CSRFToken을 갱신 해 준다. de..
· Django
Setup CACHEOPS_REDIS = { 'host': 'localhost', 'port': 6379, 'db': 1, # connection timeout 'socket_timeout': 3, # 선택 'password': '...', # host, port 대신 사용 할 경우 'unix_socket_path': '' } # URL로도 설정 가능 CACHEOPS_REDIS = "redis://localhost:6379/1" # Unix 소켓도 마찬가지로 URL로 설정 가능 CACHEOPS_REDIS = "unix://path/to/socket?db=1" # Password URL CACHEOPS_REDIS = "redis://:password@localhost:6379/1" # Sentinel 설정..
· Django
개요 서로 다른 client간에 행동을 지정 할 수 있도록 해줌 Versioning은 request의 request URL 혹은 headers에 따라 결정됨 사용 Versioning이 활성화 되면 request.version 을 사용해 확인 가능 예시 def get_serializer_class(self): if self.request.version == 'v1': return AccountSerializerVersion1 return AccountSerializer # request version에 따라 url 이 변환 됨 # reverse 사용 # reverse란? urls.py 에서의 name 혹은 viewname 을 통해 다시 url로 되돌림 from rest_framework.reverse im..
· Django
개요 모델 간의 관계를 나타낼 경우 사용한다. ForeignKey, ManyToManyField, OneToOneField 등에 적용 할 수 있다. ModelSerializer를 사용할 경우 기본적으로 PrimaryKeyRelatedField를 사용하여 자동으로 생성 해 준다.예시로 사용할 Model class Album(models.Model): album_name = models.CharField(max_length=100) artist = models.CharField(max_length=100) class Track(models.Model): album = models.ForeignKey(Album, related_name='tracks', on_delete=models.CASCAD..
· Django
Content negotiation HTTP에서 동일한 URI에서 리소스의 서로 다른 버전을 제공하기 위해 사용됨 클라이언트가 리소스를 내려받길 원하는 경우 URL을 사용하여 요청함 서버는 URL을 이용하여 리소스의 여러 변형(프레젠테이션)들중 하나를 선택 즉 이 리소스가 호출됐을 때 프레젠테이션을 선택하는 방법 결정 방법 HTTP 헤더를 이용(서버 주도 협상) HTTP 응답 코드를 이용(에이전트 주도 협상, 리액티브 협상, 풀백 메커니즘으로써 사용) 서버 주도 협상 브라우저는 URL을 이용하여 몇개의 HTTP헤더 전송 서버는 그것을 힌트로써 컨텐츠 선택 때때로 요청된 리소스의 특정 프레젠테이션을 전송하는데 사용되기도 함 이러한 알고리즘은 서버 특유의 것임헤더 목록 HTTP/1.1 표준 Accept, A..
· Django
개요 DRF에서의 Caching은 Django의 캐싱을 이용한다. Django의 method_decorator를 사용하여 cache_page, vary_on_cookie, vary_on_header등의 다른 캐시 decorator를 사용 할 수 있다. Django cache Django 에서는 여러 레벨의 캐시를 제공한다. 만들기 어려운 부분을 캐시 할 수도 있고, 전체 사이트를 캐시 할 수도 있다. 설정 settings.py 에 다음과 같이 설정이 가능하다. CACHES = { 'default': { 'BACKEND': 'cache의 바인딩 경로', 'LOCATION': 데몬이 실행중인 위치('ip:port 혹은 unix소켓 경로'..
· Django
개요 인증, 비 인증 된 사용자에 대해 요청 횟수의 제한을 둘 수 있는 DRF의 기능이다. 여러 개의 Throttle을 지정해서 사용 할 수 있고, API 별로 나누어서 설정 할 수 도 있다. 공식 문서에서는 이를denial-of-service공격의 방어책으로 사용하지 말라고 경고하고 있다. 설정 전역 설정의 경우는 다음과 같이 할 수있다. REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': [ 'rest_framework.throttling.AnonRateThrottle', 'rest_framework.throttling.UserRateThrottle', ] 'DEFAULT_THROTTLE_RATES': { &#3..
HJinS
'Django' 카테고리의 글 목록