この記事は3年以上前に書かれた記事で内容が古い可能性があります
DjangoでChatアプリを作る3(チャットの画面ができるまで)
2019-02-18
DjangoでChatアプリを作る2(What chat room would you like to enter?の画面が表示されるまで)の続き
こちら を参考に進める
https://channels.readthedocs.io/en/latest/tutorial/part_2.html
粛々とコピペする
% vim chat/templates/chat/room.html
% cat chat/templates/chat/room.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Chat Room</title>
</head>
<body>
<textarea id="chat-log" cols="100" rows="20"></textarea><br/>
<input id="chat-message-input" type="text" size="100"/><br/>
<input id="chat-message-submit" type="button" value="Send"/>
</body>
<script>
var roomName = {{ room_name_json }};
var chatSocket = new WebSocket(
'ws://' + window.location.host +
'/ws/chat/' + roomName + '/');
chatSocket.onmessage = function(e) {
var data = JSON.parse(e.data);
var message = data['message'];
document.querySelector('#chat-log').value += (message + '\n');
};
chatSocket.onclose = function(e) {
console.error('Chat socket closed unexpectedly');
};
document.querySelector('#chat-message-input').focus();
document.querySelector('#chat-message-input').onkeyup = function(e) {
if (e.keyCode === 13) { // enter, return
document.querySelector('#chat-message-submit').click();
}
};
document.querySelector('#chat-message-submit').onclick = function(e) {
var messageInputDom = document.querySelector('#chat-message-input');
var message = messageInputDom.value;
chatSocket.send(JSON.stringify({
'message': message
}));
messageInputDom.value = '';
};
</script>
</html>
room関数を定義(★部分を追記)
% vim chat/views.py
% cat chat/views.py
from django.shortcuts import render
from django.utils.safestring import mark_safe ★
import json ★
def index(request):
return render(request, 'chat/index.html', {})
def room(request, room_name): ★
return render(request, 'chat/room.html', { ★
'room_name_json': mark_safe(json.dumps(room_name)) ★
})
roomごとのURLにアクセスされるようにする(★部分を追記)
% vim chat/urls.py
% cat chat/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<room_name>[^/]+)/$', views.room, name='room'), ★
]
これでチャットの画面が表示された!
(まだチャットはできない)

