본문 바로가기
반응형

Django9

Django 에서 GROUP_CONCAT 커스텀 사용 시 order_by, separator 추가하기 class CustomConcat(Aggregate): function = 'GROUP_CONCAT' allow_distinct = True def __init__(self, expression, distinct=False, **extra): # order by = group_concat 의 정렬 기준 # separator = group_concat 의 구분자(default = ",") expr_separator = '' expr_order_by = '' order_by = extra.get('order_by') separator = extra.get('separator') if order_by: expr_order_by = f' ORDER BY {order_by} ' if separator: expr_.. 2024. 2. 27.
Gunicorn 에서 print() output 이 로깅 되지 않을 때 해결법 # myapp.service StandardOutput=journal StandardError=journal 을 추가하면 print() 문구가 노출된다 2023. 11. 22.
[Django] Replica DB 사용 시 읽기전용/쓰기전용 Database 분리하기 DB replica 를 사용할 때 읽기전용으로 replica를 사용하고, 쓰기전용으로 main(master) DB를 사용하도록 하는설정 replica_1, replica_2 를 settings.py의 DATABSES 에 선언했다고 가정 import random class DBRouter(object): def db_for_read(self, model, **hints): return random.choice(["replica_1", "replica_2"]) def db_for_write(self, model, **hints): return "default" def allow_relation(self, obj1, obj2, **hints): return True def allow_migrate(self, .. 2022. 9. 6.
Request with Signature, Nonce by Using API Key & Secret pair & Validate Request API key와 Secret 을 활용하여 안전한 API 를 구현할 때 Signature와 Nonce의 원리를 이용하면 쉽게 구현할 수 있다. Nonce는 쉽게 생각하면 요청 ID로 생각할 수 있으며, 이전 요청의 Nonce값 보다 다음 요청의 Nonce 값이 커져야 한다. (가장 쉬운 방법은 아래 코드처럼 타임스탬프를 이용하면 된다.) Nonce가 필요한 이유는 공격자가 클라이언트의 요청을 훔쳐서 그대로 서버에 요청을 보내는 경우, Nonce 값이 커지지 않고 똑같기 때문에 서버가 두 번째 요청을 거절할 수 있다. 그럼 클라이언트의 요청을 훔쳐서 Nonce만 높여서 보내는 경우에는 탈취가 가능하지 않나? 맞다. 그렇기 때문에 Signature가 필요하다. 서버에서 API key와 Secret을 발급할 때.. 2020. 12. 30.
Django Custom User Model & Custom Authentication django의 기본 유저 모델을 사용하면 간단한 사이트 구현은 어렵지 않게 할 수 있으나, 세부적인 유저 정보들을 더 담고 싶고, 로그인 등의 인증 방식을 더 다양하게 만들고 싶은 경우에는 커스텀화된 모델과 authenticate 함수를 구현하는 것이 좋다. 이번 예제에서는 django.contrib.auth.models 에 정의된 User 관련 모델이 아니라 아예 다른 django.db.models 의 Model 만을 이용하여 로그인/로그아웃 등의 auth 플로우를 구현한다. 본 글은 django 1.11.4 기반으로 작성하였다. 프로젝트 구성 MyApp - MyApp - settings.py - urls.py - account - views.py - urls.py - models.py - tests... 2020. 12. 30.
django-extensions, jupyter 를 활용하여 브라우저로 django code 접근하기 필요 패키지 설치하기 >> pip install django-extensions >> pip install jupyter 비밀번호 설정하기 >> ipython from IPython.lib import passwd passwd() >> Enter password: >> Verify password: 설정 파일 만들기 >> jupyter notebook --generate-config Writing default config to: {path}/.jupyter/jupyter_notebook_config.py >> sudo vim {path}/.jupyter/jupyter_notebook_config.py # jupyter_notebook_config.py c.NotebookApp.ip = '0.0.0.0'.. 2020. 12. 14.
반응형