장고 7

Q. 장고Django에서 테스트 코드 작성 시 개발팀 내 관습convention으로 정해야 할 사항들은?

A. 테스트 팩키지, 테스트 파일의 위치, 테스트 파일명, 테스트 클래스명, 테스트 메소드명, 테스트 함수명, 테스트 코드 작성 방식 등을 미리 정해두는 게 좋다. 미리 정하지 않으면 각자 방식대로 하게 되고, 추후 유지보수가 어렵다. 처음 시작할 때 각자 테스트를 해보고 의견을 취합해서 정하는 것이 좋다. 한번 정하면 바꾸기 쉽지 않고, 기존 테스트 코드가 있기 때문에 관성에 따라 정한 방식대로 작성하게 되기 때문이다. 테스트 팩키지pytest: 파이썬 계열 대표 테스트 팩키지. pytest 없이도 django에서 기본 제공하는 django.test로 테스트 가능하다. pytest를 사용할지 말지 논의가 필요하다. pytest-django: pytest를 활용하면서 장고django 테스트할 때 쓰는 팩..

Q. 장고Django에서 외래키ForeignKey 필드의 id를 얻을 때, field.id를 쓰지 말고 field_id를 써야 하는 이유는?

A. 쓸데 없이 데이터베이스에 Select 쿼리를 날리기 때문이다. 간단히 다음과 같은 장고 모델이 있다고 하자. 전체 코드는 DRF_CRUD 예제에서 확인할 수 있다. from django.db import models class Category(models.Model): name = models.CharField(max_length=200) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Beverage(models.Model): name = models.CharField(max_length=200) category = models.ForeignKey(Cat..

Q. 장고에 gunicorn을 같이 써야 하는 이유는?

A. CPU가 여러개인 환경에서는 훨씬 빠르기 때문이다. 그밖에 HTTPS 적용 등 다양한 기능을 활용할 수 있다. 먼저 이 글 Q. NGINX, gunicorn없이 Django장고만 실행 가능할까? 을 참고해서 gunicorn 없이 테스트를 진행하자. gunicorn 설치하고 실행하기 아래 명령어를 참고해서 gunicorn을 설치하고 실행하자. $ pip install gunicorn $ sudo GUNICORN_CMD_ARGS="--bind=0.0.0.0:80 --workers=3" ./venv/bin/gunicorn config.wsgi:application 설정 설명을 보면 추천 worker수는 CPU core수의 2~4배다. Worker Processes workers Command line: ..

Q. NGINX, gunicorn없이 Django장고만 실행 가능할까?

A. 보통은 Nginx - gunicorn - Django로 구성한다. 보통 권장되지 않지만 Django장고만 실행할 수도 있다. 로컬에서 테스트할 때처럼 하면 되고 차이점은 서버 실행 명령어다. 실행 방법 직접 해보면 잘 된다. 장고 실행하기 우선 EC2에 장고를 설치하고 실행해보자. django_minimal을 참고하자. 아래 실행 환경은 EC2 Ubuntu 20.04(t2.micro)다. EC2에 접속해서 아래처럼 진행하면 된다. $ sudo apt update $ sudo apt install python3.8-venv $ mkdir django_minimal $ cd django_minimal$ $ python3 -m venv venv $ source ./venv/bin/activate $ pi..

Q. 장고 ORM에서 OneToOneField와 ForeignKey에 unique=True를 한 경우 서로 어떤 차이가 있을까?

A. 데이터베이스 상으로는 차이가 없다. 예제 코드는 DRF CRUD 예제 프로젝트를 활용했다. 데이터베이스 설정만 MySQL로 변경했다. 변경한 예는 아래와 같다. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', 'USER': 'root', 'PASSWORD': 'password', 'HOST': '127.0.0.1', 'PORT': '3306', } } 환경은 장고는 3.2.12 파이썬은 3.8 버전이다. ForeignKey 그냥 ForeignKey 모델이다. from django.db import models class Category(models.Model): name = models.CharField..

Q. 장고Django에서 unsigned integer로 primary key를 변경하는 방법은?

A. custom 모델을 따로 만들어 줘야 한다. 보통 MySQL에서 auto increment primary key 설정할 때 unsigned로 하는데 장고는 integer를 쓰든, bigint를 쓰든 signed가 기본으로 설정된다. 왜 그렇게 하는지 이유는 모르겠다. 장고 기본 설정과 달리 unsigned로 하고 싶다면 custom 모델을 만드는 방법 밖에 없다. 아래 코드가 custom 모델 예이다. 위 모델을 불러다가 Book이란 모델을 만든다면 아래처럼 작성해야 한다. 이렇게 하면 auto increment되는 unsigned primary key를 만들 수 있다. class Author(models.Model): id = UnsignedAutoField(primary_key=True) .....

파이썬 장고Django request에서 파라미터parameter 값 갖고 오기

GET 방식으로 key란 파라미터의 값을 가져온다면? ?key=1234 key = request.GET.get('key', None) 로 가져오고 만약에 key란 파라미터가 없다면 None이 된다. 참고: django.http.request Documentation self.GET = QueryDict(mutable=True) self.POST = QueryDict(mutable=True) QueryDict에 대한 설명을 찾아보면 다음과 같다. (출처: django.http.QueryDict) QueryDict implements all the standard dictionary methods because it’s a subclass of dictionary. Exceptions are outlined..