본문 바로가기

django19

Django Database Functions - Comparison and conversion Django ORM은 데이터베이스 기능을 지원하기 위해 functions를 제공하고 있습니다. 이번 글에서는 비교 및 변환 functions들에 대해 알아보도록 하겠습니다. Cast Cast는 값의 필드 타입을 output_field의 필트 타입이 되도록 변경시키는 역할을 합니다. 이를 사용하려면 expression, output_field 2개의 인자를 Cast function에 넣어줘야 하고 두가지 모두 유효한 값이여야 합니다. from django.db.models.functions import Cast, FloatField Sample.objects.annotate( float_num=Cast('number', output_field=FloatField()) ) 위 코드가 실행되면 float_nu..
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값..
Django values, valuse_list Django ORM의 방법 중 하나로 필요한 필드의 값만 가져오기 위해 values()와 values_list()를 사용합니다. 각각 어떻게 사용하고 결과가 어떻게 나오는지 알아보겠습니다. values() 쿼리셋의 값을 딕셔너리 형태로 반환합니다. Post.objects.values().filter(id__lt=8) # Post.objects.filter(id__lt=8).values() # 만약 아래와 같이 values() 메소드에 인자로서 필드명을 넣으면 필드: 값의 형태로 가져올 수 있습니다. Post.objects.filter(id__lt=8).values('title') # values_list() 쿼리셋의 값을 튜플 형태로 반환합니다. Post.objects.filter(id__lt=8).va..
Django ORM Django를 배울 때 매우 중요한 개념입니다. ORM에 대한 지식이 없으면 Django 프로젝트를 재대로 작업할 수 없습니다. ORM은 객체 관계형 매퍼입니다. 모델 클래스를 생성하면 ORM이 자동으로 데이터베이스 체계를 생성합니다. SQL코드를 앱의 데이터가 저장되는 데이터베이스 테이블로 변환 합니다. 그리고 원할 때 그 데이터를 검색, 업데이트 및 삭제할 수 있습니다. 앱과 데이터베이스 간에 상호 작용할 수 있는 기능을 제공합니다. 모든 앱에는 중요한 데이터를 저장할 데이터베이스가 필요하다는 것을 알고 있기 때문입니다. 쿼리셋이란 | 장고 ORM query는 query 와 set이라는 두 단어의 모음입니다. query는 앱이 데이터베이스와 통신하거나 데이터베이스와 상호 작용할 때를 의미하고 앱이 데..
Django transaction atomic Django 는 기본적으로 데이터베이스 트랜잭션을 관리하는 몇가지 방법을 제공하지만 Django가 auto-commit-mode에서 실행되기 때문에 개발자가 사용하는 각각의 쿼리는 데이터베이스에 직접 커밋됩니다. Transaction 은 데이터베이스 쿼리의 원자 집합입니다. 이 함수는 데이터베이스 명을 인수로 사용하며, 제공되지 않는 경우 기본 데이터베이스를 사용하게 됩니다. Django는 atomic()블록이 활성화 되면 원자성이 손상되기 때문에 커밋 or 롤백을 거부하게 됩니다. Django는 데이터베이스 트랜잭션을 제어하는 하나의 API를 제공하며 atomic을 사용하면 데이터베이스의 원자성이 보장되는 코드를 만들 수 있습니다. auto-commit-mode에서 활성 트랜잭션이 없으면 각 쿼리는 자..
[오픈갤러리] Django 서버 정리 작업 ⑨ - 기프트카드 개선작업 보호되어 있는 글 입니다.