본문 바로가기

django19

Django 시그널 매커니즘 장고에서 시그널은 앱 간 통신 및 특정 이벤트에 대한 통지를 가능하게 하는 중요한 매커니즘입니다. 구조 Sender (송신자) Sender는 시그널을 발생시키는 주체로, 어떤 동작이나 이벤트가 일어났을 때 이를 알리는 역할을 합니다. 일반적으로 이는 특정 앱 또는 모듈에서 발생하는데, 예를 들면 유저가 생성되었을 때(user creation) 또는 모델의 저장(save) 등이 될 수 있습니다. Signal (신호) Signal은 발생한 이벤트를 표현하는 객체입니다. 이 객체에는 이벤트에 대한 정보와 추가 데이터가 담겨져 있습니다. Sender에서 발생한 특정 동작을 나타내며, Receiver가 이를 이해하고 적절히 처리할 수 있도록 정보를 제공합니다. Receiver (수신자) Receiver는..
Django 5.0 버전 출시 전 살펴보기 Django는 과거부터 지속적으로 유지보수되는 프레임워크로, 끊임없는 업데이트를 통해 많은 개발자들에게 선호되어 왔습니다. 3년에 한 번씩 메이저 버전을 업데이트하고, 8개월에 한 번씩 마이너 버전을 릴리스하는 등의 전략을 채택하고 있습니다. 현재(2023년 11월 23일)에는 Django 4.x 시리즈가 주로 사용되고 있습니다. 그러나 다가올 12월에는 Django 5.0 버전이 새롭게 릴리즈 될 예정입니다. 이번 글에서는 이 곧 출시될 5.0 버전의 주요 변경 사항에 대해 미리 알아보도록 하겠습니다. Django 5.0이 기존 버전 대비 어떠한 혁신과 개선을 가져올지, 개발자들에게 어떠한 새로운 기회를 제공할지에 대해 살펴보겠습니다. Python Version Django 5.0에서는 개발의 기본 요..
Django JSONField (Postgresql) JSON은 소프트웨어 플랫폼에서 쉽게 접할 수 있는 데이터 유형입니다. JSONField의 유연성은 데이터를 쉽게 가져오고 사용하는 데 도움이 되며, JSONField를 사용하여 복잡하게 처리해야할 데이터도 간단하게 처리할 수 있습니다. Django가 지원하는 대부분의 DATABASE 역시 JSON을 지원하고 Django 버전에 따라 JSONField를 사용하는 방법이 조금 다릅니다. 1. JSONField 생성하기 from django.db import models class Sample(models.Model): ... datas = models.JSONField('json', default=dict) JSONField는 models에 내장되어 있는 필드로 JSON 인코딩 데이터를 저장하기 위해 존재..
Django bulk_create/bulk_update 한번에 여러개의 객체를 생성해야 하거나 업데이트해야 할 경우가 작업을 하다 보면 생기게 됩니다. 이때 생성/수정 때마다 save() 메서드를 사용하게 되면 DB에 쿼리가 save() 메서드를 사용한 횟수 만큼 쿼리가 발생하여 DB에 부담이 됩니다. Django에는 이와 같은 문제를 해결하기 위해 bulk_create, bulk_update 기능이 있습니다. 이를 사용하게 되면 한번에 여러개의 객체를 저장할 수 있어 쿼리가 단 1번만 발생합니다. 사용할 때 주의할 점으로는 기본 메서드 들을 오버라이드 하여 사용하는 경우에 동작이 재대로 되지 않는다는 점입니다. 이 점을 유의하여 사용하셔야 합니다. 예제) class Sample(models.Model): name = models.CharField('이름',..
Django sitemap 분할 관리하기 Django 웹 프로젝트를 운영하게 되면 검색엔진 최적화(SEO, Search Engine Optimization)를 위해서 sitemap.xml 파일을 만들어 robot.txt에 올려야 하는 일이 발생하게 됩니다. 구글 검색 센터에서는 sitemap의 규칙으로 아래와 같이 설명하고 있습니다. 형식과 관계없이 사이트맵은 1개당 50MB(압축하지 않은 파일 기준)와 URL 50,000개로 제한됩니다. 파일이 더 크거나 URL이 더 많은 경우, 목록을 여러 개의 사이트맵으로 나눠야 합니다. 색인 파일(사이트맵 목록과 연결된 파일)을 만들어 Google에 색인 파일 하나만 제출하는 방법도 있습니다(선택사항). 즉, Google에 여러 개의 사이트맵을 제출하거나 사이트맵 색인 파일을 제출하면 됩니다. 일반 적인..
Django annotate management Django 프로젝트를 개발하다보면 동일한 annotate를 각기 다른 view에서 호출하는 경우가 생기게 됩니다. 이럴 경우 유지보수가 어려워 지는 이슈가 발생하여 나중에 고생하게 될 수도 있습니다. 그래서 이런 이슈를 방지하고자 annotate를 관리하는 방법 중 하나를 소개하고자 합니다. annotate필드를 model.py의 class내에 class method로 관리하는 방법입니다. class Sample(models.model): first_name = models.CharField('이름', max_length=24) last_name = models.CharField('성', max_length=12) @classmethod def get_annotated_field(cls): return..
Django Database Functions - Text functions Django ORM은 데이터베이스 기능을 지원하기 위해 functions를 제공하고 있습니다. 이번 글에서는 텍스트 functions들에 대해 알아보도록 하겠습니다. Chr, Ord Chr, Ord함수는 파이썬의 chr()와 ord()함수와 동일하게 동작합니다. numeric field 또는 expression을 리턴합니다. from django.db.models.functions import Chr, Ord Author.objects.create(name='Margaret Smith') author = Author.objects.filter(name__startswith=Chr(ord('M'))).get() print(author.name) # Margaret Smith author = Author.o..
Django csv streaminghttpresponse csv streaminghttpresponse는 Django에서 브라우저로 응답을 스트리밍하는 데 사용됩니다. 응답을 생성하는 데 너무 오래 걸리거나 메모리를 너무 많이 사용하는 경우 이 작업을 수행할 수 있습니다. csv 파일의 용량이 클 경우 유용하게 사용되며 전체 내용이 메모리에 내장되어 단일 조각으로 브라우저로 전송됩니다. def get_rows(): yield 'Hello,' yield 'there!' def my_view(request): return StreamingHttpResponse( get_rows, content_type='text/csv', headers={'Content-Disposition': 'attachment; filename=files.csv' )
Django Database Functions - Date functions Django ORM은 데이터베이스 기능을 지원하기 위해 functions를 제공하고 있습니다. 이번 글에서는 날짜 functions들에 대해 알아보도록 하겠습니다. Extract Extract는 날짜를 숫자로 변경합니다. DateField, DateTimeField, TimeField 또는 DurationField의 값에 lookup_name을 사용하여 날짜의 일부를 숫자로 추출할 수 있습니다. lookup_name으로는 아래 목록들이 사용 가능합니다. datetime 2015-06-15 23:30:01.000321+00:00 “year”: 2015 “iso_year”: 2015 “quarter”: 2 “month”: 6 “day”: 15 “week”: 25 “week_day”: 2 “iso_week_..