본문 바로가기
Django/Django개념

Django Channel Tutorial Part 1

by hyun-am 2021. 7. 28.

django project 만들기

장고를 실행하기 전에 먼저 가상환경을 세팅해준 후 mysite라는 이름을 가진 프로젝트를 만들겠습니다.

1. python3 -m venv myvenv

2. pip isntall django

3. django-admin startproject mysite .

그러면 다음과 같은 project가 만들어 진 것을 확인할 수 있습니다.

Chat app 만들기

다음은 chat이라는 app을 만들겠습니다. 명령어는 다음과 같습니다.

python manage.py startapp chat

그럼 다음과 같은 디렉토리 구조가 나옵니다.

여기서 저희는 chat이라는 app에서 views.py와 init.py만 남겨두고 나머지는 다 삭제하겠습니다. 왜냐하면 이것으로만 작업을 진행하기 때문입니다.

이런식으로 남겨두겠습니다. 그 후 settings.py에 들어가 chat을 installed_apps에 등록하겠습니다.

그 후 chat에 templates/chat/index.html을 만들겠습니다.

<!-- chat/templates/chat/index.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Chat Rooms</title>
</head>
<body>
    What chat room would you like to enter?<br>
    <input id="room-name-input" type="text" size="100"><br>
    <input id="room-name-submit" type="button" value="Enter">

    <script>
        document.querySelector('#room-name-input').focus();
        document.querySelector('#room-name-input').onkeyup = function(e) {
            if (e.keyCode === 13) {  // enter, return
                document.querySelector('#room-name-submit').click();
            }
        };

        document.querySelector('#room-name-submit').onclick = function(e) {
            var roomName = document.querySelector('#room-name-input').value;
            window.location.pathname = '/chat/' + roomName + '/';
        };
    </script>
</body>
</html>

다음은 chat/views.py에 다음과 같이 작성하겠습니다.

# chat/views.py
from django.shortcuts import render

def index(request):
    return render(request, 'chat/index.html')

그 후 urls.py를 생성해주겠습니다.

$touch chat/urls.py

그러면 디렉터리 구조가 다음과 같습니다.

그 후 urls.py를 다음과 같이 작성하겠습니다.

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

그 후 project에 url에 등록하겠습니다.

mysite/urls.py를 다음과 같이 설정하겠습니다.

from django.conf.urls import include
from django.urls import path
from django.contrib import admin

urlpatterns = [
    path('chat/', include('chat.urls')),
    path('admin/', admin.site.urls),
]

이제 python manage.py runserver를 통해 실행해 보겠습니다.

그 후 http://127.0.0.1:8000/chat/ 이 링크에 들어가면 다음과 같은 페이지가 나옵니다.

여기서 lobby를 입력하고 enter를 누르겠습니다. 그러면 404에러가 나오는데 이것은 room에 대한 view를 아직 작성하지 않았기 때문입니다.

그리고 ctrl + C 를 통해 서버를 종료할 수 있습니다.

Integrate the Channels library

이때 까지는 Channel 라이브러리를 전혀 사용하지 않고 개발을 진행했는데 이제는 channel을 사용해서 통합하겠습니다.

먼저 진행할 사항은 채널에 대한 루트 라우팅 구성을 만드는 것으로 시작하겠습니다. 채널 라우팅 구성은 채널 서버에서 HTTP 요청을 수신할 때 실행할 코드를 Channel에 알려준다는 점에서 Django URLconf와 유사한 ASGI 애플리케이션 입니다.

이제 프로젝트 폴더에 있는 asgi.py파일을 수정하여 시작합니다.

mysite/asgi.py

import os

from channels.routing import ProtocolTypeRouter
from django.core.asgi import get_asgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')

application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    # Just HTTP for now. (We can add other protocols later.)
})

Django의 버전이 2.2일때는 다음을 참고하겠습니다.

https://hyun-am-coding.tistory.com/entry/Django-Channels란

 

Django Channels란

Django Channels를 알기전 websocket 알아가기 웹 소켓은 HTML5의 표준 기술로, 사용자의 브라우저와 서버 사이의 동적인 양방향 연결 채널을 구성합니다. Websocket API를 통해 서버로 메시지를 보내고, 요

hyun-am-coding.tistory.com

그 후 INSTALLED_APPS에 channels를 추가하겠습니다.

INSTALLED_APPS = [
    'channels',
    'chat',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

다음은 Settings.py마지막 부분에 다음을 추가하겠습니다.

ASGI_APPLICATION = 'mysite.asgi.application'

이제 installed apps에 channels가 있으면 표준 장고 개발 서버를 channel 개발 서버로 교체하여 runserver 명령어를 제어합니다.

이제 python manage.py runserver 명령어를 통해 실행시켜주겠습니다.

그러면 이런식으로 콘솔창에 나오는 것을 확인할 수 있습니다.

Starting ASGI/Channels version 3.0.4 development server at http://127.0.0.1:8000/

이것은 이제 Channels 개발 서버가 Django 개발 서버를 가져왔다는 것을 나타냅니다.

이제 브라우저에서 http://127.0.0.1/chat/ 으로 이동하면 이전에 만든 index페이지가 나오는 것을 확인할 수 있습니다. 이제 서버를 중단하고 다음 파트에서 확인하겠습니다.

참고 링크 : https://channels.readthedocs.io/en/stable/tutorial/part_1.html

 

Tutorial Part 1: Basic Setup — Channels 3.0.4 documentation

In this tutorial we will build a simple chat server. It will have two pages: The room view will use a WebSocket to communicate with the Django server and listen for any messages that are posted. We assume that you are familiar with basic concepts for build

channels.readthedocs.io

 

'Django > Django개념' 카테고리의 다른 글

django transaction(장고 트랜잭션)  (0) 2022.08.25
마케터를 위한 CMS만들기  (0) 2021.12.31
왜 Django에서 PostgreSQL을 DB로 사용할까?  (0) 2020.12.01
models.py 살펴보기  (0) 2020.11.18
settings.py 살펴보기  (0) 2020.11.17

댓글