본문 바로가기
반응형

django12

[Django] Class-Based Views vs. Function-Based Views 클라이언트는 url 주소를 통해 서버에 request를 보내고, Django는 urls.py를 참고하여 해당 url에 매핑된 뷰를 찾아 실행한다. 이때 실행되는 뷰의 종류에는 클래스 기반 뷰(class-based view)와 함수 기반 뷰(function-based view)가 있다. 클래스 기반 뷰(Class-Based Views) 클래스 기반 뷰이든 함수 기반 뷰이든 뷰가 실행하는 것은 함수이다. 우리가 View.as_view() 클래스 메소드를 사용하여 URL 정의에 뷰를 추가하면 이는 view라는 함수를 리턴한다. as_view() 메소드가 어떻게 짜여 있는지 보자.(생략되지 않은 코드는 깃허브에서)class View: @classonlymethod def as_view(cls, **initkwa.. 2019. 2. 19.
[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.
반응형