본문 바로가기

728x90

Frame Work/Django

(21)
[Django] Session ! 개요 django에서 Session에 관한 기본 내용을 정리해보고자 합니다. Session을 다루기 전 Session을 다루기에 앞서 AbstractBaseUser 모델을 이용해서 테스트했습니다.. AbstractBaseUserModel은 아래 링크에서 이미 다룬 적 있습니다. [Django] AbstractBaseUser Model 다루기 개요 Django Project를 처음 생성하고 migrate를 시켰을 때 사용자 모델을 입맛대로 조정할 수 있는 방법이 없나 생각하게 되었습니다. 예를 들어 userid 대신 email이나 phone을 userid로 로그인을 하려면 어 jakpentest.tistory.com 이번에 사용할 AbstractBaseUser 모델의 구성은 간략하게 다음과 같이 구성했습니..
[Django] Select && Prefetch Related ! 개요 Django ORM에서 참조 관계에 있는 모델 간에 데이터를 가져오게 될 때 사용하는 select_related & prefetch_related가 무엇인지 조사해봤다. Model 이 포스팅에서 사용할 모델은 다음과 같다. from django.db import models class Machine(models.Model): name = models.CharField(max_length=120) class History(models.Model): # 객체 이름을 참조할 떄는 string으로 circular import 방지를 위해 machine = models.ForeignKey("Machine", related_name="history_set", on_delete=models.CASCADE) ob..
[Django] model 필드 순서 조정하기 개요 AbstractBaseUser 모델을 통해 db에 migrate까지 했으나 막상 DataBase에 들어가서 직접 테이블 관찰해 보니 필드 순서가 엉망입니다. 필드의 순서를 왜 조정해야 될까? 사실 필드의 순서가 엉망이라고 해서 개발이 안 된다거나 해당 필드를 참조할 수 없다거나 하는 에러가 발생하진 않습니다. 개인적인 생각은 필드의 순서를 조정한다는 것의 의미는 필요한 정보를 먼저 보겠다라는 의도지 않을까 싶습니다. 예를 들어 DB에 접속해서 직접 데이터를 고쳐야 하는 상황에서 한 스키마의 필드가 20개가 넘는다면 매번 필요한 데이터를 찾는데 스크롤을 끝으로 미뤄서 확인하는 수고를 들여야 합니다. 마치 생성일이 섞인 A4 용지에서 필요한 데이터를 찾는 것과 동일하지 않을까 합니다. 왜 순서가 꼬일까..
[Django] model migration 꼬였을 때 장고에서는 abstractbaseuser 모델이라는 기능을 제공한다. 개발자가 계정에 관련하여 커스텀하여 사용할 수 있게끔 제공해주는 기능이다. 나의 경우 sample db를 사용해 이미 migrate를 진행한 뒤 abstractbaseuser 모델을 적용시키려던 상황에서 다음과 같은 Error가 났다. abstractbaseuser 모델을 상속받아 작성한 클래스가 Account라는 이름을 가진 클래스인데 해당 에러는 account 모델을 core라는 앱에서 제공을 하지 못하는 상태라고 한다. 그러니 다음과 같이 마이그레이션을 되돌렸다. # migration의 위치를 처음으로 되돌림 python manage.py migrate core zero # `core`라는 이름을 가진 app에 대하여 migrat..
[Django] app의 model만 관리하는 app을 만들어보자 개요 django의 model을 사용하다 약간의 불편함이 생겼습니다. 생성한 app의 models.py에서 model을 선언해서 사용하다 보니 app이 많아 질수록 여기저기 오가면서 테이블을 뒤져봐야 한다는 점이었습니다. Two Scoops of Django라는 책에서는 작은 단위의 app으로 관리하는 방법을 적용하라고 하던데 이에 반대하는 호기심으로 테이블을 한 곳으로 몰아넣고 그곳에서만 관리를 해보면 어떨까 하는 생각을 해봤습니다. 목적 앞서 언급했듯 목적은 한 폴더에서 models를 관리할 수 있는 것입니다. 잠시 고민한 뒤 다음과 같은 방법을 사용해보기로 했습니다. core/models/__init__. py 만들고 테이블마다 파일을 생성한 뒤 라이브러리화 시켜보자 Setting 하기 sqlit..
django, ForeignKey N+1 Forign Key 참조를 사용해보다가 발견한 현상 아래 두 모델은 DRF를 익히기 위해 만든 모델이다 class User(AbstractBaseUser, PermissionsMixin): email = models.EmailField(max_length=255, unique=True) password = models.CharField(max_length=128) objects = UserManager() USERNAME_FIELD = "email" REQUIRED_FIELDS = [] class Feed(models.Model): id = models.BigAutoField(help_text='Feed ID', primary_key=True) user_id = models.ForeignKey("User..
django, timezone에 관한.. Example : Last_Login ! django의 user model은 last_login이라는 필드를 지원한다. 해당 유저가 마지막에 로그인한 시간을 기록하는 테이블이다. Simple JWT는 토큰을 발급할 때 TokenObtainPairSerializer를 이용하는데 이 Serializer를 타고 타고 들어가다 보면 django의 FrameWork의 update_last_login 메서드를 가져다 쓰고 있다. # /django/contrib/auth/models.py def update_last_login(sender, user, **kwargs): """ A signal receiver which updates the last_login date for the user logging in. "..
django.db.utils.DataError: (1366, "Incorrect string value: ~~~) 개요 집에서는 docker를 통해 MySQL 컨테이너를 쓰고 있다. 호스트 컴퓨터는 windows 10, docker를 쓰고 있는 운영체제는 VMware에다 ubuntu 20.04를 올려서 사용하고 있다. windows에서 postman을 통해 ubuntu에다 post() 요청을 수행했을 때 다음과 같은 에러가 일어났다. /etc/my.cnf 수정하기 해결방법은 /etc/my.cnf 파일에 아래의 내용을 추가함으로 써 해결할 수 있었다. [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8' charac..

728x90
반응형