Django
-
[Django] MiddlewareDjango 2024. 2. 2. 09:25
HTTP 요청 / 응답 처리 중간에서 작동하는 시스템 HTTP 요청이 들어오면 미들웨어를 거쳐서 해당 URL에 등록되어 있는 뷰로 연결해주고, HTTP 역시 미들웨어를 거쳐서 내보낸다 Django에서 미들웨어는 http 요청 또는 응답 전처리에 사용된다 Setting.py에서 MIDDLEWARE의 full python path를 추가하면 된다 Django-admin startproject 명령어로 django project 생성 시 기본적으로 미들웨어들이 등록되어 있다 미들웨어 등록시 가장 중요한 것은 미들웨어를 등록하는 순서다. 미들웨어 등록 순서가 가지는 의미 HTTP request가 들어오면 위에서부터 아래로 미들웨어를 적용 HTTP response가 나갈 때 아래서부터 위로 미들웨어를 적용 Cus..
-
[Django] Django ThrottlingDjango 2024. 2. 2. 09:12
특정 조건 하에 최대 호출 횟수를 결정하는 클래스 Request가 승인되어야 하는지 여부를 결정하는 점에서 permissions와 유사 Setting.py를 통해 전역으로 설정 가능 AnonRateThrottle 인증요청에는 제한을 두지 않고 비인증 요청에는 IP별로 횟수 제한 Throttle 클래스 별로 scope 1개만 지정 가능 Default : anon UserRateThrottle 인증요청에는 유저별로 횟수를 제한하고, 비인증 요청에는 IP별로 횟수 제한 Throttle 클래스 별로 scope 1개만 지정 가능 Default : user ScoptedRateThrottle ScoptedRateThrottle 인증요청에는 유저별로 횟수 제한, 비인증 요청에는 IP별로 횟수 제한 API view 내..
-
[Django] 로그 설정하는 법Django 2024. 1. 10. 09:13
대략적인 방법은 이렇다. 로그 관련 파일을 만든다. 로그를 만들고 싶은 파일로 들어가 해당 파일을 임포트한다 Logging.{출력하고 싶은 로그 레벨}(들어가고자하는 내용)을 집어넣는다 # log_setter.py Import os Import time Import logging Import logging.handlers From logging.handlers import TimedRotatingFileHandler Class RetimedRotatingFileHandler(TimedRotatingFileHandler) def __init__(self, filename, when=‘h’, interval = 1, backUpCount=0 , encoding=None, delay=False, utc=Fal..
-
[Django] CHAR 적용하기Django 2024. 1. 2. 16:14
# models.py class rCharField(models.Field): description = "CHAR field in mysql" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.max_length = kwargs["max_length"] def db_type(self, connection): return f"CHAR({self.max_length})" Django의 MTV 중 하나인 model에서는 varchar 형식만 지원해준다. Char 형식을 지정해주기 위해서는 따로 클래스를 지정하여 사용해야 한다. 적용 방식은 models.py에 rCharField 클래스를 지정해준뒤 다음과 같이 CHAR 형식을..
-
Django SignalsDjango 2023. 11. 12. 09:48
Django는 시그널 포착기를 포함한다. Signal dispatcher : 분리된 애플리케이션들이 프레임워크상 어디서든 액션이 발생하면 통지받게끔 함 signal은 sender들에게 하여금 어떤 액션이 발생했다는 것을 receiver들에게 전달하는 것을 가능하게 해준다. *주의! Signal은 느슨한 결합을 제공하지만, 디버깅, 수정이 어려운 코드로 만들어 질 수 있다. 가능하면 신호를 통해 발송하는 것보다는 직접 핸들링 코드를 호출하는 방법을 선택해야 한다. Signal을 받기 위해, receiver는 signal.connect() 메서드를 사용한 리시버 함수를 등록해야 한다. 리시버 함수는 signal을 받았을 때 호출된다. 모든 signal의 리시버 함수들은 등록 순서대로 한번에 한번 호출된다. ..
-
[Django] Django의 Transaction 처리Django 2023. 11. 6. 17:52
Django의 Transaction *Mysql은 버전에 따라 Django의 트랜잭션이 적용되지 않을 수도 있다. *Mysql 버전이 트랜잭션을 지원하지 않으면, Django는 항상 오토커밋 모드로 기능읋 할 것이다. View 함수를 실행하기 전에 Django는 트랜잭션을 시작한다. Response에 문제가 없다면, Django는 트랜잭션을 커밋한다. 만약 view에 예외가 발생했다면, Django는 트랜잭션을 롤백한다. View가 StreamingHttpResponse를 반환한다면, response의 내용을 읽는 행위는 내용을 만들기 위해서 코드를 실행시킬 것이다. *StreamingHttpResponse(HLS) HTTP/1.1 및 HTTP/2와 같은 최신 HTTP 프로토콜에서 지원 : 데이터를 조각..