본문 바로가기

분류 전체보기

(24)
Python에서 super() 함수의 이해 super()를 호출해서 리턴되는 임시객체는 클래스 메소드처럼 부모 클래스의 메소드만을 호출할 수 있도록 해주는 proxy 객체다. 이때 부모 클래스의 인스턴스는 생성되지 않는다. 부모 클래스의 인스턴스(a=Animal()했을 때 생성되는 a, 즉 인스턴스)와 super()를 호출했을 때 생성되는 임시객체는 다음과 같은 차이점이 있다. 임시객체는 super()로 호출된다. 즉, 자식 클래스를 정의한 코드 안에서만 반환하도록 되어있다. 내부적으로 파이썬이 method resolution order(MRO)를 구현하기 위해 사용된다,(MRO는 들어는 봤지만 아직 공부하지 않았기 때문에 찾아보도록 한다.) 클래스의 인스턴스는 인스턴스 메소드에 접근할수 있지만 임시객체는 클래스 그 자체(class Animal:..
DRF json으로 null이 올 경우, required 옵션 설정을 통해 대처하는 방법 DRF를 사용하는 웹서버에 json으로 null을 보내면 파이썬은 None으로 인식한다. DRF나 django에서 CharField와 TextField는 django convention을 따르면 null=True 와 blank=True 를 동시에 사용하지 말고, blank=True 만 적용하라고 되어있다. 두 개 다 동시에 사용하면 데이터베이스에 empty string(’’ 혹은 “”)과 null 이라는, 타입이 다른 빈 값이 공존하게 되기 때문이다. json에 null이 왔을 때는 위의 옵션으로만 대처가 가능하지만 serializer field로 명시되어 있는 attribute가 json에 포함되어 있지 않을 경우, required 옵션을 사용하면 된다. required 옵션은 명시적으로 지정하지 않으..
AWS cil 사용해서 퍼블릭 키를 확인하는 방법 aws ec2 describe-key-pairs -key-pair-names "key name" --include-public-key 를 하면 aws ec2의 key-pair에 등록한 키의 퍼블릭 키를 확인 할 수 있다. 하지만 --include-public-key 를 했을 때 not found error가 발생하는 경우가 있다. 이럴 때는 aws cli의 버전을 확인해서 버전을 업데이트해줘야 한다. asdf로 버전관리를 하고 있을 경우 아래의 커맨드로 간단하게 업데이트 할 수 있다. # .tool-versions에 먼저 awscli의 버전을 기입해줘야한다. asdf install awscli 2.9.22
Django CharField editable editable이 False면 admin 또는 다른 ModelForm에서 해당 필드는 나타나지 않는다. model validation에서도 스킵된다. Default는 True다. first_name = models.CharField(max_length=150, editable=False) Reference https://docs.djangoproject.com/en/4.1/ref/models/fields/ Django
Django 데이터베이스 mysql 설정하기 Django setting mysql collation에 대해서는 각 모델의 프로퍼티를 설정할 때 마다 지정해줘야하는 것같다.. 그러므로 데이터베이스를 처음 만들 때 지정해주자. CREATE DATABASE my_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 그렇지 않으면 migration파일에서 RunSQL 을 사용해서 collation을 바꿔주는 방법도 있다. 처음부터 database를 만들 때 위의 커맨드로 collation을 지정해줬기 때문에 settings.py에는 아래와 같이 설정했다. django-envrion 패키지를 사용해서 .env file에 설정을 별도로 지정해줬다. # settings.py DATABASES = { "default": ..
Django-environ 패키지를 활용한 Django 환경변수 설정 django-environ 패키지는 장고 애플리케이션에 필요한 환경변수를 .env파일에 따로 구성할 수 있도록 해준다. django-environ을 사용한 django의 settings.py의 예제다. import os from pathlib import Path import environ # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent env = environ.Env() ENV_MODE = env.str("ENV_MODE", "local") env_file = ".env.{}".format(ENV_MODE) # Take environment var..
DRF token-based vs session based authentication Token-based authentication in Django Rest Framework uses tokens (string) to authenticate clients, while session-based authentication uses sessions (a more complex structure) to authenticate clients. In token-based authentication, the client sends an API request with a token in the header, and the server verifies the token to determine if the client is authenticated. Tokens can be revoked, making..
django allowed hosts invaild host header elb alb django Allowed hosts with aws elb 아래와 같이 쓰여져 있는데 회사에서는 ECS를 사용하고 있으므로 ECS의 프라이빗IP를 설정해줘야한다. 문제는 deploy될 때 프라이빗 IP가 바뀐다는 것이다. 이는 장고가 들어있는 컨테이너를 deploy를 하고 나서 ip를 알수 있을테니, 처음부터 정확한 프라이빗 ip를 장고의 allowed hosts에 설정하는 것은 지금으로서는 방법이 떠오르지 않는다. 취할 수 있는 해결책으로는 아래의 3개다. 프라이빗ip의 액세스를 허가하는 것. → 책이 오면 판단한다. 구니콘이나 nginx, elb등에서 제어할수 있을지도? ecs의 컨테이너에 route53으로 프라이빗 도메인을 설정하고 elb에서 health check할때 프라이빗 ip가 아닌, 프라..