본문 바로가기

소프트웨어 이야기/장고와 루비온레일즈

(saleor) 가독성 좋은 함수명 만들 때 유용한 팁 모음집 이 글은 Django E-commerce OpenSource인 Saleor에서 얻은 팁들을 정리한 문서입니다. 1. 값을 증분할 때는 increase / decrease 동사를 prefix으로 붙인다.def increase_voucher_usage(voucher): voucher.used = F('used') + 1 voucher.save(update_fields=['used'])def decrease_voucher_usage(v..
(Django) 비즈니스 로직을 어디에 모아둘까 비즈니스 로직을 어따모아둘까.. 🤔 루비온레일즈, 장고를 쓸 때마다, 도메인 관리에 대한 프레임이 정해져있지 않은 듯하여 매번 고민이다.  But. Djagno엔 QuerySet, Form Object 개념이 기본으로 포함되어 있어서, 좋다. 레일즈에서는 레이어를 만들거나, 라이브러리를 사용해야한다.  ( 참고 - 레일즈에 Service/Decorator Layer 적용하기 🐜🐜..
(Django) Django ORM에서 Row Lock 잡기 - select_for_update Row Lock과 SELECT * FOR UPDATEUPDATE / DELETE 없이, SELECT 만으로 Row Lock을 잡고 싶을 때는, "SELECT * FOR UPDATE" 쿼리를 사용하면 된다.이렇게 Row Lock을 잡고있는 도중에는 다른 트랜잭션에서 해당 Row를 변경 / 삭제할 수 없다. select_for_updateDjango에서 SELECT * FOR UPDATE 쿼리를 사용할 때는, Django ORM sel..
(Django) Django로 e-commerce 개발할 때 참고하기 좋은 오픈소스 e-commerce  Django 오픈소스 saleor가이드문서 - https://docs.getsaleor.com/en/latest/gettingstarted/installation-macos.html데모 사이트 - https://demo.getsaleor.com/en/django-oscar 메인 github - https://github.com/django-oscar/django-oscar/데모 사이트 - ht..
(Django) Rest Frame Work Filter 활용하기 FilterBackend 사용하기ViewSet에서 Request 파라미터로 받은 값이랑 일치하는 데이터를 조회해야할 때, 아래처럼 일일히 파라미터를 받아다가, filter 조건에 추가해줘야한다. class ProductList(generics.ListAPIView): serializer_class = PurchaseSerializer def get_queryset(self): """ This vi..
(Django)데이터베이스 커넥션을 관리하는 방법  Connection 재사용Django는 데이터베이스에 쿼리를 처음 날리기 전에 Connection을 맺는다. 그리고 커넥션을 계속 열어뒀다가, 다음 요청이오면 이걸 재사용한다. Request가 날라올 때마다 Connetion을 새로 맺는건 부담이 큰 작업이다. 그래서 Django에는 CON_MAX_AGE라는 설정값이 있다. 여기에 설정된 기간만큼 Connection을 닫지않고, 보존하겠다는 개념이다. 따로 설정해주지 않..
[django] get_XXX_display 함수 : 모델의 속성 값을 사람이 읽을 수 있는 문장으로 변환하기 Django Model Field에 choices 속성이 걸려있는 경우, 코드에 맞는 display용 텍스트를 볼 수 있게 하는 함수가 있다.음.. 말로하면 어려운데, 아무튼 이런거다.from django.db import models class Book(models.Model): CONDITIONS = ( (1, '새책'), (2, '중고책'), ) name = models.CharField(ma..
[django] 자주 사용되는 query set 모아서 관리하기 자주 사용되는 query set들을 한군데 모아서 관리하는 방법을 설명해보고자 합니다 :) 1. manager.py 를 만들어서, query set을 추가합니다class LessonQuerySet(models.QuerySet): def jazz(self): return self.filter(subject='jazz')2. model에 query set을 manager으로 등록해줘야합니다 class Lesson(mo..