장고 ORM을 이용하여 DB에서 데이터를 불러올 때 내가 원하는 데이터만을 가져오게 하기 위해서는 필터를 사용해야 한다. 기본적으로 model이름.objects.all()을 할 경우 해당 테이블의 모든 데이터를 가져온다. 특정한 값만 가지고 오고 싶은 경우 이렇게 하면 상당히 비효율적이다. 이때 filter를 이용하여 원하는 값만 가져올 수 있다. model이름.objects.filter() 이것을 이용하면 된다. exact - 정확히 일치하는 데이터 가져오기 iexact - 대소문자 구분 없이 정확히 일치하는 데이터 가져오기 None을 찾는 것은 Null을 찾는 것과 동일하다. model이름.objects.filter(id__exact=1) model이름.objects.filter(id__exact=N..
장고에서는 반드시 request를 매개변수로 받아온다. request는 많은 정보를 담고 있다. 우선 그냥 request를 출력해보자. # 데코레이터, csrf 토큰 검증 비활성화 @csrf_exempt def ss(request): print(request) return HttpResponse("good") 아래와 같은 출력 결과를 얻을 수 있다. WSGIRequest라는 객체가 존재하고, POST방식이고, url경로 정보가 나온다. 이번엔 GET 방식으로 요청해 보았다. 아래와 같이 쿼리까지 모두 나온다. Django가 http request를 받으면, 해당 정보들을 가지고 WSGIRequest 객체를 생성한다. 이를 view의 첫 번째 매개변수로 전달한다. 그렇기 때문에 꼭 request라고 하지 ..
django 테스트 케이스와 비슷하다. api 테스트를 돕는다. from rest_framework import status from rest_framework.test import APITestCase from django.urls import reverse class LocationTestCase(APITestCase): def setUp(self): self.test_url = reverse('location') def test_status(self): data = { 'lon': 126.9784039920235, 'lat': 37.566627074987274, 'limit': 1, 'user_id': "asdf" } response = self.client.get(self.test_url, dat..
장고 초창기 많은 튜토리얼들을 따라 하다 보면, templates에 저장해둔 html 파일들을 가져다 쓸 때 render라는 함수를 이용한다. def todo_list(request): # complete 열이 False인 행만 가져온다. todo = Todo.objects.filter(complete__exact=False) return render(request, 'base/todo_list.html', {'todo': todo}) 대충 뭐해주는 친구인지는 알겠는데.. 정확히 뭘 하는 함수일까? request는 왜 인자로 넣어줄까? 등등 render에 대한 모든 궁금증을 파헤쳐 보자. 프레임워크를 이용하며 모르는 함수가 생겼을 땐 항상 가장먼저 "공식 문서"를 읽어본다. 이후 여러 블로그들을 참조하며..
장고에서 ORM(Object Relational Mapping)은 DB 관리를 위해서 반드시 알아두어야 할 상식이다. ORM은 전통적으로 우리가 DB를 관리하기 위해 DDL이나 DML을 직접 입력해 사용하던 것을 프로그래밍 언어를 통해 통일성 있게 작성해 주는 방법이다. DDL, DML을 이용할 경우 DB 관리자마다 사용하는 쿼리문들이 다르다. 그로 인해 검색 효율성 등이 떨어질 수 있다.(특히 나와 같이 미숙한 개발자들은..) 장고의 ORM을 이용하게 되면 우리는 이런 거 이런 거 만들어주세요! 하면 알아서 제일 효율적인 방법으로 만들고, 검색해준다. ORM은 파이썬 장고에만 국한된 것이 아니라 다양한곳에 사용되고 있다. 장고 ORM의 경우 조금 불편한 점이 몇가지 있다면, 복합 키 구성이 안되고, P..
DRF의 핵심 내용 중 하나인 serializer가 무엇인지 알아보고 어떻게 사용해야 되는지 정리해 보았다. serialization은 "직렬화"라는 뜻이다. 시리얼라이저는 직렬화 시키다. 즉 어떤 데이터를 특정한 포장지를 이용해 감싸주는 도구이다. 시리얼라이저를 사용함으로써 데이터를 정형화 시킬 수 있다. 데이터를 정형화시키게 되면 당연히 통신에도 편하고 데이터 불러오기, 저장 등등에 편리하게 이용할 수 있다. 시리얼라이저는 querysets, db 데이터 인스턴스와 같은 복잡한 데이터들을 파이썬 JSON, XML과 같은 데이터 타입으로 쉽게 변환될 수 있게 해 준다. 아래는 간단한 시리얼라이즈 예시이다. 클래스에 있는 어트리뷰트들을 db에 저장하기 위해, 네트워크를 통해 전달하기 위해 데이터를 정형화..