質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

1回答

1002閲覧

django でログインユーザーだけの chat をしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2021/09/16 08:39

django でログインしたユーザーだけの chat をしたいと思っています。

django channels にあるチュートリアルは、1から4まで pipenv で実行し、きちんと動作することを確認しております。

ネット検索にて、「django-channels を使った websocket を用いたチャットアプリの作成」を見つけ、Github からダウンロードして動かしてみたのですが、どうしても web socket が繋がりません。

環境は
linux mint 20.2 cynnamon
です。

python

1CHANNEL_LAYERS = { 2 'default': { 3 'BACKEND': 'channels_redis.core.RedisChannelLayer', 4 'CONFIG': { 5 "hosts": [('redis', 6379)], # デフォルト:繋がらない 6 "hosts": [('127.0.0.1', 6379)], # 繋がるが無限ループ 7 }, 8 }, 9}

デフォルトの"hosts": [('redis', 6379)]にすると以下のように繋がりません。

HTTP GET / 200 [0.16, 127.0.0.1:50358] HTTP GET /room/b024fd92-41c4-421b-982b-53ef1c135314 200 [0.09, 127.0.0.1:50358] WebSocket HANDSHAKING /ws/b024fd92-41c4-421b-982b-53ef1c135314 [127.0.0.1:50438] WebSocket DISCONNECT /ws/b024fd92-41c4-421b-982b-53ef1c135314 [127.0.0.1:50438]

"hosts": [('127.0.0.1', 6379)]にすると、以下のように connect と disconnect が短時間で無限ループのようになります。

HTTP GET /static/debug_toolbar/js/utils.js 304 [0.00, 127.0.0.1:46070] WebSocket CONNECT /ws/b024fd92-41c4-421b-982b-53ef1c135314 [127.0.0.1:46084] WebSocket DISCONNECT /ws/b024fd92-41c4-421b-982b-53ef1c135314 [127.0.0.1:46084] HTTP GET /room/b024fd92-41c4-421b-982b-53ef1c135314 200 [0.07, 127.0.0.1:46070] HTTP GET /static/debug_toolbar/js/toolbar.js 304 [0.00, 127.0.0.1:46094] WebSocket HANDSHAKING /ws/b024fd92-41c4-421b-982b-53ef1c135314 [127.0.0.1:46096] HTTP GET /static/debug_toolbar/js/utils.js 304 [0.00, 127.0.0.1:46094] WebSocket CONNECT /ws/b024fd92-41c4-421b-982b-53ef1c135314 [127.0.0.1:46096] WebSocket DISCONNECT /ws/b024fd92-41c4-421b-982b-53ef1c135314 [127.0.0.1:46096]

参考サイトには「適当に redis サーバを用意したら ./manage.py runserver で起動します。」と書いてあるのですが、その具体的な設定方法がわかりません。

ちなみに「sudo systemctl status redis-server」で確認すると、redis server は active(running)となっています。

また、/etc/redis/redis.conf をいろいろと編集してみたのですが、やはり動きません。

参考サイトのプログラムがあまりにも素晴らしいので、できることなら導入したいのですがどのようにしたらいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

完全解決したわけではないのですが動くようにはなりました。
room.htmlの例外処理で「location.reload();」をコメントアウトしたら、動くことは動きます。

でも、これはエラーが発生しているということで、そのエラーは
「TypeError: NetworkError when attempting to fetch resource.」
というものでした。
このエラーをキャッチして reload するので永久ループに入ったようです。

そしてこのエラーは、いろいろ検索した感じでは簡単に解決できそうにありませんでした。

とりあえずは動いているのでこれで解決とさせて頂きます。

javascript

1 const api_url = 'http://localhost:55002/rooms/{{room.id}}/'; 2 const rendering_room_info = () => { 3 fetch(api_url) 4 .then(response => response.json()) 5 .then(response => { 6 const members = response.members; 7 const el_members = document.getElementById('members'); 8 el_members.innerHTML = ''; 9 members.map(member => { 10 const template = document.getElementById('room-member-template'); 11 const clone = template.content.cloneNode(true); 12 if (member.is_online) { 13 console.log('online'); 14 clone.querySelector('.is-online').classList.remove('d-none'); 15 } else { 16 console.log('offline'); 17 clone.querySelector('.is-offline').classList.remove('d-none'); 18 } 19 clone.querySelector('.user-name').textContent = member.username; 20 el_members.appendChild(clone); 21 }); 22 }) 23 .catch(e => { 24 console.error(e); 25 //location.reload(); ← ここをコメントアウトしたら動くようになりました。 26 }); 27 }

投稿2021/09/17 03:46

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問