🌈 프로그래밍/Django

    PyCharm Django에서 Django 콘솔 구성하기

    파이참에서는 빌드, 실행, 배포 > 콘솔 > Django 콘솔을 제공해주는데, 여기서 아래쪽에 시작 스크립트 부분에서는 직접 코드를 수정할 수 있도록 제공해준다.이 시작 스크립트에 작성된 부분은 IDE에서 해당 콘솔을 시작할 때 실행시켜주며, 이 콘솔을 통해서 다양한 작업들을 할 수 있게 도와준다.예를 들어, 디버그 해야 하는 부분이 있어서 환경을 맞추고 디버그하기 위해 사용한다거나 필요한 실행 스크립트를 직접 실행시킨다거나 등등..아무튼 그러면 나의 Django 프로젝트에서 사용하고 있는 모델 정보들을 이 시작 스크립트에서 모두 불러오게 커스텀이 필요하다! 1. django_extensions 설치프로젝트 내에 해당 라이브러리를 설치해주어야 한다.이 라이브러리는 운영단까지는 필요없으므로, 개발 환경단에..

    파이참 django 프로젝트 소스 디렉터리 설정

    파이참에서 django 프로젝트를 켰을 때 import 구문에서 불러올 수 없는 문제가 있었다.그치만 서버를 로컬에서 실행하는데에는 문제가 없었음.빨간 줄을 없애보자~우선 , + command로 파이참 설정 창을 띄운 후에 프로젝트 구조 섹션으로 이동하면 된다.그러면 소스 폴더와 제외된 폴더, 템플릿 등등을 추가하거나 삭제할 수 있는데,나의 django 프로젝트 같은 경우에는 프로젝트 루트에 `manage.py`가 있는게 아니고 `web` 디렉터리 하위에 존재하기 때문에소스 폴더에 `web`을 추가해주었다.최종 해결 모습

    테스트 자동화 하기

    Refactoring"Whenever you read [Refactoring], it’s time to read it again. And if you haven’t read it yet, please do before writing another line of code." ?David Heinemeier Hansson, Creator of Ruby on Rails, Founder & CTO at Basecamp Fully Revised and Updated-Includes New Refactorings and Code Examples “Any fool can write code that a computer can understand. Good programmers write code that humans..

    unmanaged table에 대한 django test 하는 방법

    장고의 모델 클래스에는 Meta 옵션 중 하나로 managed라는 값이 존재한다. 이는 True 또는 False이고 기본값은 True로 설정된다. True로 설정된다면 그 뜻은 다음과 같다. 쉽게 말해 장고가 해당 모델 클래스를 관리한다는 뜻이다. 이를 공식문서에서는 어떻게 표현하고 있냐면, https://docs.djangoproject.com/en/4.2/ref/models/options/#managed Django The web framework for perfectionists with deadlines. docs.djangoproject.com That is, Django manages the database tables’ lifecycles. 즉, 테이블의 수명 주기를 관리한다라고 한다. 테이..

    djongo를 설치하는 과정에서 발견한 오류들

    Django 프로젝트에서 MongoDB를 사용하기 위해 `djongo` 를 설치하려고 했을 때 발생한 문제와 그 해결방법에 대해 알아보자. 프로젝트의 초기 toml 파일은 다음과 같았다. [tool.poetry.dependencies] python = "^3.10" djangorestframework-simplejwt = "^5.2.2" mysqlclient = "

    [ Django ] select_related()와 prefetch_related()

    Django를 좀 한다 그러면 이 둘의 개념은 필수적으로 알아야 한다. (그래야 밥벌어 먹고 살 수 있엉..) 기본 개념을 숙지하고 반복해서 실무에 적용할 수 있도록 하여 내 것으로 만들어야겠다! 사용하는 이유? - QuerySet은 기본적으로 Lazy Loading(지연 로딩) 방식을 선택한다. - 하지만 SQL로 한번에 많은 양의 데이터를 가지고오고 싶을 때가 있으며 그럴때 위의 메소드들를 사용한다. - 즉, 관계가 있는 object를 Eager Loading(즉시 로딩) 하기 위해서 사용한다. 이 둘의 차이점? - 1:1, 1:N, N:M의 관계중에 따라 달리 사용되어진다. - 우선 가장 큰 차이점으로는 추가 쿼리가 발생하는지 안하는지이다. 1. select_related - select의 경우 1..

    Django Session Cookie Age 알아보고 커스텀하기

    Django 프로젝트의 루트 경로에 있는 settings.py에 정의되어 있는 세션 관련 내용이 다음과 같았다. REST_FRAMEWORK REST_FRAMEWORK = { "DEFAULT_AUTHENTICATION_CLASSES": [ "rest_framework.authentication.SessionAuthentication", ], } INSTALLED_APPS INSTALLED_APPS = [ ... "django.contrib.sessions", ... ] MIDDLEWARE MIDDLEWARE = [ ... "django.contrib.sessions.middleware.SessionMiddleware", ... ] API 테스트를 진행하던 도중, 아래와 같은 응답을 받은적이 있었다. { "..

    [ django ] AWS lambda raw sql 에서 django raw sql로 TypeError: not enough arguments for format string 에러

    AWS 정상 동작 쿼리문 SELECT -- 생략 DATE_FORMAT(DATE_ADD(m.schedule, INTERVAL 9 HOUR), '%Y.%m.%d %H:%i') schedule, -- 생략 FROM Match WHERE -- 생략 AND DATE_FORMAT(DATE_ADD(m.schedule, INTERVAL 9 HOUR), '%T') between '08:00:00' and '11:00:00' 위의 쿼리의 의미 1. 데이터를 가져오는데 시간 값을 해당 포맷으로 지정하고 가져와! 2. 시간 데이터를 가져오는데 시간값만 가져오고, 해당 시간이 08시부터 11시 사이인 데이터만 가져와! 해당 쿼리를 서버쪽 @shared_task로 이전해야 했기에, 굳이 ORM으로 변경하지 않고 사용하던 쿼리를 ..

    [ Django ORM ] 문자열 숫자를 int로 캐스팅해서 정렬해보자.

    보통 문자열 숫자를 정렬한다고 하면 .. ["60", "20", "0", "120", "0", "80"] 위와 같이 문자열로 이루어져있는 숫자들이 있다고 가정해보자. 별 다를 것 없이 정렬한다면 어떤 결과가 나올까? 실제 결과는 아래와 같다. ['0', '0', '120', '20', '60', '80'] 0 다음에 120이 바로 나오게 된다. 왜냐하면 너무 당연하게도 앞문자열에 따라 120의 1이 20보다 빠르기 때문이다. 실제 나는 정렬하려고 하는 기준 데이터들은 다음과 같았다. 해당 필드는 문자열이고 문자 + 숫자가 함께 저장되어있는 필드였다. 우선, BAD_WEATHER_ 이라는 문자열은 모두 공통이므로 from django.db.models.functions import Substr Substr..

    [ Django ] SerializerMethodField를 이용한 시리얼라이저 커스텀하기

    이번 포스팅에서는 Django에서 Serializer에 대한 내용을 다뤄보려고 합니다. 한동안 포스팅을 올려야지만 생각하고 실제로는 못하고 있었네요 😂 아무리 바쁘더라도 기록은 필수..! 그러면 내용에 들어가기 앞서 왜 SerializerMethodField를 사용해야 하는지, 무엇을 하려고에 대한 내용을 정리해보려고 합니다! 우선, 현재 환자와 의사에 관련된 진료 예약 서비스를 구축하고 있습니다. 환자는 원하는 시간 특정 의사에게 진료를 받고 싶다고 요청을 보냅니다. 그러면 요청을 받은 의사는 목록을 확인하여 진료 시간을 확인하고, 해당 요청을 시간 내에 수락할 수 있도록 하는 서비스입니다. 간단한 설명을 마치고 바로 본론으로 들어가보도록 하겠습니다. def get(self, request, *args..