07. メッセージに発言者名の追記
メッセージに発言者名が追記されるようにします。
解説
メッセージに発言者名が追記されるように、以下を行います。
- チャットページHTMLファイルにユーザー名に関するコードを追加する。 ( chat.html の変更 )
- ChatConsumerクラスにユーザー名に関するコードを追加する。 ( consumers.py の変更 )
メッセージに発言時刻も追記されるようにします。
準備
06. を実施していない場合は、まず、06. を実施します。
仮想環境への切り替え
仮想環境に切り替えていない場合は、「MyChat」フォルダにて、下記コマンドを実行し、仮想環境に切り替えます。
「mysite」フォルダに移動していない場合は移動します。
これ以降のコマンドの実行は、仮想環境にて実行します。
チャットページHTMLファイルの変更
チャットページHTMLファイルにユーザー名に関するコードを追加します。
「mysite/chat/templates/chat/chat.html」に、以下の変更を加えます。
- 「参加画面」(join-screen)と「チャット画面」を用意します。(chat-screen)
- 「参加画面」は、ウィンドウの高さの残り全部を灰色で覆い、灰色部分の中央に「ユーザー名入力フォーム」を配置します。(display:flex)
- 「チャット画面」は、初期状態は、非表示とします。(display:none)
- 「チャット画面」に「ユーザー名テキスト」を追加します。
- グローバルHTMLエレメント変数の定義を追加します。 ( const g_elementXXX = document.getElementById( "XXX" ); )
- 「参加画面」の「Join」ボタンを押すと呼ばれる関数の定義を追加します。
- 「チャット画面」の「Leave Chat.」ボタンを押すと呼ばれる関数の定義を追加します。
- 「Send」ボタンを押したときの処理の、WebSocket
- WebSocketからメッセージ受信時の処理に、表示するメッセージに発言者名を付加する処理を追加します。
「mysite/chat/templates/chat/chat.html」の内容を以下のようにします。
ChatConsumerクラスの変更
ChatConsumerクラスにユーザー名に関するコードを追加します。
「mysite/chat/consumers.py」に、以下の変更を加えます。
- datetimeモジュールのimport文を追加します。 ( import datetime )
- コンストラクタを追加し、グループ名メンバー変数の初期化とユーザー名メンバー変数の初期化を追加します。 ( def __init__() )
- WebSocketからのデータ受信時の処理に、「チャットへの参加時の処理」と「チャットからの離脱時の処理」を追加します。
- 「チャットへの参加」関数と「チャットからの離脱」関数を追加します。
- グループに参加する処理は、WebSocket接続時の処理ではなく、「チャットへの参加」関数で行うようにコードを変更します。
- グループからの離脱する処理は、WebSocket切断時の処理ではなく、「チャットからの離脱」関数で行うようにコードを変更します。WebSocket切断時には、「チャットからの離脱」関数を呼び出すようにします。
「mysite/chat/consumers.py」の内容を以下のようにします。
動作確認
「mysite」フォルダにて、下記コマンドを実行し、サーバーを起動します。
ブラウザを1つ立ち上げ、「http://127.0.0.1:8000」にアクセスします。
「参加画面」が表示されます。
ユーザー名を入力し、「Join Chat」ボタンを押します。
「チャット画面」が表示されます。
入力した「ユーザー名」が表示されます。
「aiueo」と「あいうえお」というメッセージをフォームに入力し、「Send」ボタンを押します。
送信したメッセージが、即座に、ブラウザのメッセージリストに追加されます。
メッセージには、発言時刻と発言者名が追記されます。
ブラウザをもう1つ立ち上げ、「http://127.0.0.1:8000」にアクセスします。
ユーザー名を入力し、「Join Chat」ボタンを押します。
「abc」と「xyz」というメッセージをフォームに入力し、「Send」ボタンを押します。
送信したメッセージが、即座に、両方のブラウザのメッセージリストに追加されます。
メッセージには、発言時刻と発言者名が追記されます。
起動したサーバーは、「Ctrl + C」で終了します。
ダウンロード
関連ページ
前項目:06. WebSocket Consumer の処理の非同期処理化
次項目:08. チャットルームに分かれてチャット