본문 바로가기

728x90

Development/Django

(14)
[Django] "database does not exist" when connecting to AWS RDS postgres DB 1. 문제 상황 Docker 위에서 Django를 사용해 AWS RDS에 DB를 연동시키는 과정에서 다음과 같은 에러가 발생하였습니다. "database does not exist" 분명히 AWS console에 접속하여 RDS가 존재하는 것을 확인하였으나 python manage.py migrate 명령어를 입력하면 위의 에러처럼 Database가 존재하지 않는다고 하였습니다. 2. 해결 방법 그러나, 검색을 통해서 해결방법을 찾았습니다. stackoverflow.com/questions/51014647/aws-postgres-db-does-not-exist-when-connecting-with-pg AWS Postgres DB "does not exist" when connecting with PG ..
[Django] Path Variable 과 Query Parameter 이 글은 https://velog.io/@jcinsh/Query-string-path-variable 에서 참고하여 저의 생각을 정리한 글입니다. 좀 더 자세한 사항은 참고 블로그를 찾아주세요. 웹에서 특정 데이터를 전송하고 받기 위해서는 어디에 즉, End-point에 요청할 것인가가 중요한 문제입니다. 데이터를 전송하기 위해 GET, 전송 받기 위해 POST 방식을 쓰는데 이 때 각각의 경로 즉, End-point를 정하는 것도 하나의 고민거리가 됩니다. 1) Query string /users?id=123 # Fetch a user who has id of 123 위에서 보는 것처럼 ? 뒤에 id란 변수에 값을 담아 백엔드에 전달하는 방식이 Query String 입니다. users에 담긴 정보 중..
[Django] 동적 필터링 동적으로 받아온 URL 파라미터로 출판사를 필터링 한다면 다음처럼 하드코딩하지 않아도 됩니다. 이것을 위해 get_queryset() 메소드를 재정의할 수 있습니다. 클래스 뷰를 호출하면 self에 유용한 것들이 많이 저장됩니다. self.request 뿐만 아니라 url 설정에 따라 캡쳐된 위치(self.args)와 이름 기반(self.kwargs) 인수가 포함됩니다. queryset은 서버를 시작할 때 단 한번만 queryset을 생성한다. 혹은 request 발생 시 한번만 queryset이 동작합니다. 반면에 get_queryset method는 매번 쿼리를 발생시킨다. 즉, get_queryset은 쿼리를 동적으로 사용하고 싶을 때 유용합니다.
[Django] User Model 확장 (6) - UserManager Custom User Model을 만들기 위해서는 두 Class(BaseUserManager, AbstractBaseUser)를 구현해야 합니다. BaseUserManager Class는 유저를 생성할 때 사용하는 헬퍼(Helper) 클래스이며, 실제 모델은 AbstractBaseUser를 상속받아 생성하는 클래스입니다. 헬퍼(Helper) 클래스인 class UserManager(BaseUserManager): 는 두 가지 함수를 가지고 있습니다. create_user(*username_field*, password=None, **other_fields) create_superuser(*username_field*, password, **other_fields) 저는 첫번째 파라메터인 username ..
[Django] User Model 확장 (5) - AbstractBaseUser 모델 상속한 사용자 정의 User 모델 사용하기 AbstractBaseUser 모델 상속한 사용자 정의 User 모델 사용하기 개요 AbstractBaseUser 모델을 상속한 User 모델을 만들고 settings.py에 참조를 수정하는 것은 AbstractUser 모델을 상속하는 것과 같다. 따라서 마찬가지로 프로젝트 시작 전에 이 기법의 사용 여부를 결정하는 것이 바람직하다. 그런데 AbstractUser 모델을 상속하는 방법과 달리 로그인 아이디로 이메일 주소를 사용하도록 하거나 Django 로그인 절차가 아닌 인증 절차를 직접 구현하고자 할 때 사용할 수 있다. 예를 들어, 기존에 운영 중이던 PHP 솔루션의 회원 디비를 그대로 재사용하고자 한다면 AbstractBaseUser 모델을 상속한 User 커스텀 모델을 만들어야 한다. 단점은 운영..
[Django] User Model 확장 (4) - AbstractUser 모델 상속한 사용자 정의 User 모델 사용하기 AbstractUser 모델 상속한 사용자 정의 User 모델 사용하기 개요 AbstractUser 모델을 상속한 User 모델을 만들어 settings.py에 참조를 수정해야 한다. 이 기법의 사용 여부는 프로젝트 시작 전에 하는 것이 좋다. 추후에 settings.AUTH_USER_MODEL 변경시 데이터베이스 스키마를 알맞게 재수정해야 하는데 사용자 모델 필드에 추가나 수정으로 끝나지 않고 완전히 새로운 사용자 객체를 생성하는 일이 된다. 이 기법은 기존 Django의 User 모델을 그대로 사용하므로 기본 로그인 인증 처리 부분은 Django의 것을 이용하면서 몇몇 사용자 정의 필드를 추가할 때 유용하다. 구현 #필요한 모듈 임포트 ... from django.contrib.auth.models ..
[Django] User Model 확장 (3) - User 모델과 OneToOneField의 프로필 테이블 추가하기 User 모델과 OneToOneField 관계의 프로필 테이블 추가하기 개요 기존 User 모델과 OneToOneField로 일대일관계를 맺는 Django 모델을 추가해서 사용자에 관한 정보를 저장하는 것이다. 더보기 OneToOneField란? OneToOneField는 1:1 관계를 의미합니다. 저는 이 관계를 django에 기본적으로 정의되어 있는 User 모델과 이를 확장(customizing)하여 새로 만드는 Profile 모델을 연결해 줄 때 자주 사용합니다. django 에서의 사용 예시 class User(AbstractBaseUser): # 생략 class Profile(models.Model): user = models.OneToOneField(User, on_delete=models...
[Django] User Model 확장 (2) - 프록시 모델 사용하기 프록시 모델 사용하기 개요 프록시 모델이란 새 테이블을 추가하는 등의 데이터베이스 스키마의 변경 없이 단순히 상속한 클래스입니다. 더보기 스키마란? 데이터베이스 구조와 전반적인 제약조건에 관한 명세를 기술한 것입니다. 자세히 말하면, 개체의 특성을 나타내는 속성(Attribute)와 속성들의 집합으로 이루어진 개체(Entity), 개체 사이에 존재하는 관계(Relation)에 대한 정의와 이들을 유지해야 할 제약조건들을 기술한 것입니다. 쉽게 말하여, 데이터베이스 내에 어떤 구조로 데이터가 저장되는가를 나타내는 데이터베이스 구조를 스키라라고 합니다. 정렬 순서 같은 기존 모델의 동작을 변경하거나 새로운 메소드를 추가하기 위해 사용합니다. 데이터베이스에 부가적인 사용자 정보를 저장할 필요가 없을 때 사용하..

728x90