반응형 개발/Django11 [Django] QuerySet을 사용할 때 쿼리를 몇 번 가져오는지 확인하자 사이트에서 Get 방식으로 가져오는 API 하나가 1.5초 정도로 너무 오래 걸린다 싶었는데 django-debug-toolbar(공식문서)의 SQL탭을 보니 쿼리를 150번 정도 돌리고 있었다.그렇게 복잡한 API도 아니었는데 이렇게 쿼리를 많이 돌리는 이유를 보니, - serializer에서 다른 테이블을 참조- for loop로 QuerySet을 돌림 이 중 두 번째, for loop로 QuerySet을 돌리는 실수가 가장 치명적이었다.심지어 for loop 아래의 for loop에서까지 돌리고 있었다.쿼리 1-10개 정도야 반짝하고 가져오지만 100개가 넘어가면... 그래서 for loop 아래에서 Model.objects.filter(..) 등으로 QuerySet을 가져오는 부분을 모두 바깥으로.. 2019. 2. 13. [Django] Django 에러 핸들링 api.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'User.groups'.HINT: Add or change a related_name argument to the definition for 'User.groups' or 'User.groups'.api.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'User.user_permissions'.HINT: Add or change a related_name argument.. 2019. 2. 12. [Django] ORM과 모델 Django ORM(Object Relational Mapping) # 개요Object-Relational Mapping(ORM)은 관계형 데이터베이스와 Django 모델 객체 간의 매핑을 제공하는 매우 유용한 기술이다.Django를 처음 써보는, 혹 아직 써보지 않은 사람들에게는 이 개념이 잘 와닿지 않을 수 있는데, 한 마디로 SQL문을 사용하지 않고도 데이터베이스를 관리할 수 있게 해준다는 거다. 예를 들어, 데이터베이스에 'person'이라는 테이블을 생성하기 위해 다음 SQL문을 짰었다면,CREATE TABLE person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NO.. 2019. 2. 12. [Django] Django Rest Framework에서 request 로깅하기 drf-trackinghttps://github.com/aschn/drf-tracking # 설치drf-tracking 설치$ pip install drf-trackingsettings.py의 INSTALLED_APPS에 'rest_framework_tracking' 추가그리고 APIRequestLog 모델 생성 위해 마이그레이션 실행$ python manage.py migrate # 사용view가 실행될 때마다 APIRequestLog 인스턴스를 생성하기 위해, views.py에 rest_framework_tracking.mixins.LoggingMixin 추가한다.request를 로깅하고 싶은 클래스에 LoggingMixin를 넣어주면 된다.# views.py from rest_framework im.. 2019. 2. 8. 이전 1 2 3 다음 반응형