TIL/Django(10)
-
[Django] Channels 사용하기 - 4
이 글은 [Django] Channels 사용하기 - 3에서 이어집니다. views 테스트하기 Selenium을 사용하여 end-to-end 테스트를 할 것이다. 메시지를 보낼 때, 같은 방에 있는 모두가 그 메시지를 보는가 메시지를 보낼 떄, 다른 방에 있는 누군가는 메시지를 볼 수 없는가 Selenium을 설치하자 $ python3 -m pip install selenium chat/tests.py 파일을 만들고 코드를 작성하자. # chat/tests.py from channels.testing import ChannelsLiveServerTestCase from selenium import webdriver from selenium.webdriver.common.action_chains impor..
2022.10.24 -
[Django] Channels 사용하기 - 3
이 글은 [Django] Channels 사용하기 - 2에서 이어집니다. 비동기 consumer 작성하기 기존에는 동기적인 consumer를 만들었다. 동기 consumer는 특별한 코드없이 Django 모델에 동기적으로 접근할 수 있어서 편리하지만, 비동기 consumer는 추가 스레드를 생성할 필요가 없다는 점에서 높은 성능을 자아낸다. 기존에 사용하던 sync_to_async를 사용해도 되지만 async-native 라이브러리를 사용하는 것이 더 성능이 좋다. 이제 ChatConsumer를 비동기 형태로 바꿔보자. chat/consumers.py를 다음과 같이 바꾸자. # chat/consumers.py import json from channels.generic.websocket import As..
2022.10.24 -
[Django] Channels 사용하기 - 2
이 글은 [Django] Channels 사용하기 - 1에서 이어집니다. room view 추가 특정 채팅방에서 게시된 메세지를 볼 수 있는 room view를 추가하도록 하자. chat/templates/chat/room.html파일을 추가하자. chat/ __init__.py templates/ chat/ index.html room.html urls.py views.py 그리고 해당 파일에 다음과 같이 작성하자. {{ room_name|json_script:"room-name" }} 이제 view에서 room.html 파일을 찾아갈 수 있게 작성해 주자. # chat/views.py from django.shortcuts import render def index(request): return re..
2022.10.18 -
[Django] Channels 사용하기 - 1
Django의 Chaanels는 Django에서 웹 소켓을 사용할 수 있게 해주는 라이브러리이다. Channels는 django에서 HTTP이외의 웹 소켓이나, IoT 프로토콜과 같은 다양한 프로토콜을 지원하기 위해 만들어졌다. Channels는 비동기 형식으로 django를 래핑하여 작동한다. ASGI 기반으로 개발 되었다. 하기 내용은 Channels 공식 문서를 참조하여 작성하는 글이다. 설치 $ python3 -m pip install -U channels 참고로 필자는 위의 방법으로 설치 시 에러가 나서 아래와 같이 설치했다. $ pip install channels 설치가 완료되면 다음과 같이 확인해 보자. $ python3 -c 'import channels; print(channels.__..
2022.10.17 -
[Django] connection.queries always empty
django에서 작성한 orm이 어떤 식으로 쿼리가 날아가는 지 확인하기 위해 raw 쿼리를 찍어보려고 했는데 connection.queries를 해도 계속 [] 라는 빈 값이 나왔다. 어떠한 짓을 해도 쿼리의 개수가 0이었기 때문에 무엇이 문제인지 구글링을 하던 도중 여기서 해답을 찾을 수 있었다. 나는 django-extention을 사용하여 shell-plus를 쓰고 있는데, 쉘 플러스는 쿼리가 평가될 때 raw쿼리를 찍어서 보여주기 때문에 이 친구가 connection을 잡고 있는 것 같았다. 즉, 이미 shell-plus가 쿼리를 다 확인했기 때문에 내가 찍었을 때는 없는 것이었다...라고 생각이 든다.
2022.10.13 -
[Django] DRF란?
DRF란? Django REST Framework의 약자로 django에서 RESTful API를 쉽게 만들 수 있도록 도와주는 오픈소스 라이브러리 Multi Platform 시대에 맞게 오픈 API 형태로 제공하거나, 협업하는 프론트 개발자가 쉽게 데이터를 주고받을 수 있게 직렬화 및 역직렬화 진행 REST란? REpresentational State Transfer의 약자로 자원을 URL에 표현하여 자원의 상태 및 정보를 주고 받는 모든 것을 의미 예를 들어, 음식 데이터가 DB에 저장되어 있을 때, /api/foods라는 형태로 URL을 제공하여 해당 URL로 요청을 보내면 음식 데이터(자원)를 전송해 준다. 즉, Django에서 RESTful한 API 서버를 구축하기 위해 필요한 것들을 구현해 놓..
2022.10.12