본문 바로가기

장고(DJango)

(17)
[Django, DRF] 장고 쿼리 필터 (query filter) 장고 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..
[Django] request 매개변수 장고에서는 반드시 request를 매개변수로 받아온다. request는 많은 정보를 담고 있다. 우선 그냥 request를 출력해보자. # 데코레이터, csrf 토큰 검증 비활성화 @csrf_exempt def ss(request): print(request) return HttpResponse("good") 아래와 같은 출력 결과를 얻을 수 있다. WSGIRequest라는 객체가 존재하고, POST방식이고, url경로 정보가 나온다. 이번엔 GET 방식으로 요청해 보았다. 아래와 같이 쿼리까지 모두 나온다. Django가 http request를 받으면, 해당 정보들을 가지고 WSGIRequest 객체를 생성한다. 이를 view의 첫 번째 매개변수로 전달한다. 그렇기 때문에 꼭 request라고 하지 ..
[DRF] 테스트 케이스 (test case) 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..
[Django] render 함수 (render function) 장고 초창기 많은 튜토리얼들을 따라 하다 보면, 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에 대한 모든 궁금증을 파헤쳐 보자. 프레임워크를 이용하며 모르는 함수가 생겼을 땐 항상 가장먼저 "공식 문서"를 읽어본다. 이후 여러 블로그들을 참조하며..
[Django] ORM & migration 장고에서 ORM(Object Relational Mapping)은 DB 관리를 위해서 반드시 알아두어야 할 상식이다. ORM은 전통적으로 우리가 DB를 관리하기 위해 DDL이나 DML을 직접 입력해 사용하던 것을 프로그래밍 언어를 통해 통일성 있게 작성해 주는 방법이다. DDL, DML을 이용할 경우 DB 관리자마다 사용하는 쿼리문들이 다르다. 그로 인해 검색 효율성 등이 떨어질 수 있다.(특히 나와 같이 미숙한 개발자들은..) 장고의 ORM을 이용하게 되면 우리는 이런 거 이런 거 만들어주세요! 하면 알아서 제일 효율적인 방법으로 만들고, 검색해준다. ORM은 파이썬 장고에만 국한된 것이 아니라 다양한곳에 사용되고 있다. 장고 ORM의 경우 조금 불편한 점이 몇가지 있다면, 복합 키 구성이 안되고, P..
[DRF] serializer (django-restframework 시리얼라이저) DRF의 핵심 내용 중 하나인 serializer가 무엇인지 알아보고 어떻게 사용해야 되는지 정리해 보았다. serialization은 "직렬화"라는 뜻이다. 시리얼라이저는 직렬화 시키다. 즉 어떤 데이터를 특정한 포장지를 이용해 감싸주는 도구이다. 시리얼라이저를 사용함으로써 데이터를 정형화 시킬 수 있다. 데이터를 정형화시키게 되면 당연히 통신에도 편하고 데이터 불러오기, 저장 등등에 편리하게 이용할 수 있다. 시리얼라이저는 querysets, db 데이터 인스턴스와 같은 복잡한 데이터들을 파이썬 JSON, XML과 같은 데이터 타입으로 쉽게 변환될 수 있게 해 준다. 아래는 간단한 시리얼라이즈 예시이다. 클래스에 있는 어트리뷰트들을 db에 저장하기 위해, 네트워크를 통해 전달하기 위해 데이터를 정형화..
[Django] 장고 settings.py 시크릿키 등 중요정보 ini파일로 관리하기 깃헙 같은 곳에 프로젝트를 올릴 때 중요한 정보들은 올리지 않고 따로 관리해 주어야 한다. 여러 방법 중 하나인 ini 파일을 생성해서 중요 정보를 저장하고, 불러와서 사용하는 방법에 대해 배워보자. 파이썬 표준 라이브러리에 ini 파일 읽는 패키지가 있다. import configparser 우선 ini 파일을 하나 만들어 보자. settings의 secret key는 노출되면 안되기 때문에 이 정보를 ini파일에 다음과 같이 저장한다. ini 파일은 프로젝트 폴더에 저장한다. (manage.py가 저장되어 있는 폴더) [SETTING] SECRET_KEY = 당신의비밀키 이제 settings.py로 돌아가서 ini파일에 저장해둔 secret key를 가져오자. import configparser im..
(작성중) 장고 배포 하기 (gunicorn, Nginx) 우리가 그동안 장고를 실행할 때 python manage.py runserver 를 입력하여 개발 하는 도중 서버를 실행하여 각종 테스트를 해봤다. 하지만 장고의 내장서버를 이용하여 실제로 운영하는데에는 많은 한계가 있다. 내장 서버는 오직 개발 테스트 용으로만 써야 한다. Now’s a good time to note: don’t use this server in anything resembling a production environment. It’s intended only for use while developing. 장고 튜토리얼에 게시되어 있는 글이다. 이것을 실제 배포용 서버로 사용하지 마라. 오로지 개발을 위해 사용하라. 라고 되어 있다. 자 그럼 이제 실제로 배포를 하기위해 필요한 것들을..