본문 바로가기

장고12

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 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 커스텀 커맨드 만들기 장고로 커스텀 커맨드 만들기 장고 manage.py에 커맨드를 추가하려면 장고의 사용자 지정 커맨드를 만들면됩니다. 커스텀 커멘드를 작성하는 것으로 manage.py부터 사용할 수 있는 커멘드를 늘릴 수가 있습니다. 이 글에서는 이 사용자 지정 커맨드를 만드는 방법을 설명합니다. 구체적으로는 ↓를 살펴 보겠습니다. 사용자 지정 커맨드 개요 프로젝트 만들기 앱 만들기 커맨드 만들기 커맨드 실행 커맨드에 대해 자세히 알아보기 사용자 지정 커맨드 개요 Django의 커스텀 커맨드는 정확히 "custom django-admin commands"를 말합니다. Django에서는 앱마다 커맨드를 만들 수 있습니다. 이 커맨드는 manage.py에서 실행할 수 있습니다. 예를 들어 showposts커맨드를 만들면 ↓와..
Django의 Meta 클래스 사용법 [ordering, db_table, verbose_name, etc] 장고의 메타 클래스 Python 웹 프레임워크인 장고(Django)는 모델이라는 추상화된 클래스를 사용하여 데이터베이스에 테이블을 정의합니다. 이 모델은 models.Model을 계승시킨 클래스로서 작성합니다만, 이 클래스내에는 Meta(메타) 라고 하는 내부 클래스를 배치할 수가 있습니다. 모델의 클래스내에 Meta 클래스를 정의하는 것으로 Django 의 그 모델의 취급 방법을 변경하는 것이 가능합니다. 또, 모델에 한정하지 않고 Meta 클래스는 form등에도 설정할 수 있습니다. 이 글에서는이 Meta 클래스의 일부 기능에 대해 설명합니다. 구체적으로는 ↓를 살펴 보겠습니다. Meta 클래스 개요 Meta 클래스를 작성하는 방법 ordering을 작성하는 방법 db_table을 작성하는 방법 ve..
Django의 channel로 만드는 간단한 채팅 앱 장고의 채널로 만드는 간단한 채팅 앱 Django에서는 Channels 라는 기능을 사용하면 WebSocket을 사용한 채팅 앱 등을 만들 수 있습니다. Channels는 Django에서 비동기 통신 뷰를 실현하는 기능입니다. 채널은 HTTP뿐만 아니라 다양한 프로토콜을 지원합니다. 예를 들어 WebSocket, MQTT, chatbots 등입니다. Channels는 채널이라고 불리는 데이터 구조가 핵이 되고 이것의 실체는 FIFO 큐입니다. 논리적으로는 Go의 channels와 비슷합니다. 이 글에서는 즉시 간단한 채팅 앱을 만들면서 장고의 채널을 살펴 보겠습니다. Channels 설치 먼저 pip를 사용해서django channels를 설치합니다. $ pip install django $ pip in..
Django ORM distinct() Django에는 QuerySet이라는 객체가 있고 filter및 order_by등의 대표적인 메소드 외에, distinct 라는 메소드가 있습니다. 이 메소드를 사용하면 QuerySet 결과에서 중복 레코드(행, 오브젝트)를 제거할 수 있습니다. distinct()검증을 위해 모델을 만듭니다. Person 이라는 모델을 만듭니다. 이것은 사람을 표현하는 모델이며 이름과 나이와 같은 필드가 있습니다. from django.db import models class Person(models.Model): name = models.CharField(max_length = 128) age = models.IntegerField() name나 age필드에는 unique을 붙이지 않습니다. 따라서 name와 age값..