Python(37)
-
[Django] annotate DateTimeField 지난 달 구하기
목차 설명 Django ORM에서 annotate를 사용해 기존 필드의 지난 달을 구하는 방법입니다. 전체 ORM Model.objects.annotate( last_month=ExpressionWrapper( TruncMonth( F('created_date'), output_field=DateTimeField() )-timedelta(days=1), output_field=DateTimeField() ), ).annotate( last_month_yymm=Func( F('last_month'), Value('YYMM'), function='to_char', output_field=CharField() ) ) 부분 설명 1. 해당 월의 1일 구하기 ex) 2023-12-12 -> 2023-12-01 T..
2024.01.05 -
[Django] Cache(캐시)
목차캐싱이란?무언가를 캐시 한다는 것은 비용이 많이 드는 계산 결과를 저장하여 다음에 계산을 수행할 필요가 없도록 하는 것이다.Django Cache 종류종류설명django.core.cache.backends.db.DatabaseCache캐시된 데이터를 데이터베이스 테이블에 저장합니다. 데이터베이스 액세스가 빠르고 효율적인 프로젝트에 적합합니다django.core.cache.backends.filebased.FileBasedCache캐시된 데이터는 파일 시스템에 저장됩니다. 파일 시스템에 쉽게 액세스할 수 있는 소규모 프로젝트나 시나리오에 적합합니다.django.core.cache.backends.memcached.MemcachedCacheMemcached 분산 메모리 캐싱 시스템을 사용합니다. Mem..
2024.01.03 -
[Django] Django model on_delete 종류
목차on_delete란? ForeignKey의 on_delete 옵션은 참조되는 객체가 삭제되면 Django 인수에 의해 지정된 SQL 제약 조건의 동작이다. on_delete 종류1. CASCADE: 참조된 객체가 삭제 될 때 해당 객체도 함께 삭제된다.from django.db import modelsclass RelatedModel(models.Model): pass class TestModel(models.Model): test = models.ForeignKeyField(RelatedModel, on_delete=models.CASCADE)2. PROTECT: 참조된 객체가 삭제 될 때 ProtectedError를 발생시킨다. 참조된 객체 삭제 시 해당 객체 먼저 삭제를 선행해야..
2023.12.20 -
[Python] Bandit application security test(보안 취약점 검사)
목차 bandit 란? ast 모듈을 사용해서 Flake8이나 다른 정적 도구처럼 코드를 분석하며, 보안 문제가 발생할 수 있는 코드를 검색합니다. 의도치 않은 보안 취약점을 파악 할 수 있고, Severity(심각성), Confidence(신뢰성) 를 단계별로 확인 할 수 있습니다. git https://github.com/PyCQA/bandit GitHub - PyCQA/bandit: Bandit is a tool designed to find common security issues in Python code. Bandit is a tool designed to find common security issues in Python code. - GitHub - PyCQA/bandit: Bandit i..
2023.11.27 -
simple history 이력 확인
목차 내용 Django 사용 시에 Model의 이력관리를 위해 simple history를 사용하는 경우가 많다. simple history를 이용해 실수로 삭제를 해서 object를 조회하기 힘든 경우에도 조회나 복구가 가능하다. simple history https://django-simple-history.readthedocs.io/en/latest/ django-simple-history — django-simple-history 3.5.0.post4+g4d39103 documentation © Copyright 2013, Corey Bertram. Revision 4d39103e. django-simple-history.readthedocs.io 설치방법 1. Install $ pip insta..
2023.10.16 -
[Django] 특정 리스트에 순서에 맞게 order_by(id 순서대로 정렬)
이슈 상황 데이터베이스 쿼리는 반드시 사용자가 제공한 순서대로 가 아니라 데이터베이스에서 찾은 순서대로 개체를 반환한다. 조건으로 넣은 리스트 순서에 따라서 조회가 되게 하려면, 특정 리스트에 순서에 맞게 order_by를 하는 작업이 필요하다. 예시 id 리스트 [1, 3, 2]를 넣으면 [object(1), object(3), object(2)] 순서로 조회가 되게 하는 경우이다. Example code id_list의 1, 3, 2 순서대로 order_by를 진행 id_list = [1, 3, 2] objects = Model.objects.filter(id__in=id_list).order_by( Case(*[When(id=id, then=pos) for pos, id in enumerate(id..
2023.10.10 -
Versioning decorator
설명 Django Versioning을 하기 위한 방법 중 하나로 Decorator를 만들어 Versioning하는 방법을 정리했습니다. 목차 Django Versioning https://www.django-rest-framework.org/api-guide/versioning/ Versioning - Django REST framework www.django-rest-framework.org Versioning Decorator 장점 API 구현 시 Depth 가 줄어든다. 유지보수가 편해진다 아래 예시는 Serializer 만 변경되지만, 변경 부분이 다수 존재하는 경우 유지보수가 어려워짐 명확한 version 관리 가능 API 에 대해서 Version을 진행했을 때 버전별 API를 명확히 확인 가..
2023.08.21 -
[Django] SerializerMethodField
글 내용 SerializerMethodField 사용 시 N+1 문제가 발생할 수 있는 상황에 대한 정리 SerializerMethodField의 장점 모델에 없는 데이터 정의 후 사용 유연성 및 데이터 정의 동적으로 필드 구현 등등 위와 같은 장점이 있지만 주의점이 존재 N+1 상황 아래와 같은 방식으로 작성 시에 team에 대해서 Prefetch가 되어 있어도 N+1문제가 발생 Prefetch User.objects.prefetch_related( Prefetch( 'consultings' queryset=Consulting.objects.filter(status=1) ) ) Serializer class UseSerializer(ModelSerializer): consulting_list = Ser..
2023.06.19