yoshiislandblog.net
元営業の駆け出しアラサーSEが、休日にMACと戯れた際の殴り書きメモ。日々勉強。日々進歩。

この記事は3年以上前に書かれた記事で内容が古い可能性があります

DjangoでChatアプリを作る1(ASGI/Channelsで立ち上げるまで)

2019-02-18

DjangoでSNSログイン機能を実装させる4(TwitterLogin実装まで)の続き

こちら を参考に進める
https://channels.readthedocs.io/en/latest/installation.html

Tutorialと違うのは、コンテナ上で動かしているところと、
login appと一緒のサイトで作っているところ

requirements.txtにchannelsを追記する(★部分追記)

 
% cat requirements.txt
Django
psycopg2
python-decouple
social-auth-app-django
channels ★

dockerを立ち上げる
※すでに立ち上がっている場合はdocker stopで止めておく

% docker-compose build

Successfully …で終わればOK

% docker-compose up

以下が出力されればOK

web_1  | Django version 2.1.7, using settings 'mysite.settings'
web_1  | Starting development server at http://0.0.0.0:8000/
web_1  | Quit the server with CONTROL-C.

別タブを開いて作業する

mysite/settings.pyにchannels追加(★部分追記)

% vim mysite/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'social_django',
    'mysite.login',
    'channels',  ★
]

このままだと以下のエラーが出るので、

web_1  | CommandError: You have not set ASGI_APPLICATION, which is needed to run the server.
mysite_web_1 exited with code 1

以下を追加する

これと

% cat mysite/routing.py
from channels.routing import ProtocolTypeRouter

application = ProtocolTypeRouter({
    # Empty for now (http->django views is added by default)
})

これと

% cat mysite/asgi.py
"""
ASGI entrypoint. Configures Django and then runs the application
defined in the ASGI_APPLICATION setting.
"""

import os
import django
from channels.routing import get_default_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
django.setup()
application = get_default_application()

settijngs.pyには最終行に追記する

% vim mysite/settings.py
ASGI_APPLICATION = "mysite.routing.application"

これで再び立ち上がる

% docker-compose up
web_1  | Starting ASGI/Channels version 2.1.7 development server at http://0.0.0.0:8000/
web_1  | Quit the server with CONTROL-C.

ちょっと脱線、オフラインで作業するとき、0.0.0.0だと繋げなかったので、
localhostも追記しておく

% vim mysite/settings.py
ALLOWED_HOSTS = ['0.0.0.0','127.0.0.1','localhost']

DjangoでChatアプリを作る2(What chat room would you like to enter?の画面が表示されるまで)に続く