DjangoとChannelsで簡単なチャットサーバーを構築(1)
こちらのチュートリアルと同じ内容です。https://channels.readthedocs.io/en/latest/tutorial/index.html 環境 Python 3.7.0Django 2.2.2ch […]
Filter by Category
こちらのチュートリアルと同じ内容です。https://channels.readthedocs.io/en/latest/tutorial/index.html 環境 Python 3.7.0Django 2.2.2ch […]
Beautiful Soupで以下のようなHTMLのoptionタグのvalueを取得する方法です。 optionタグのvalueの値を取得する方法 soup = soup.find_all('option')optio […]
Dockerを使ってシンプルなDjangoとPostgreSQLの開発環境を構築する方法です。GitHubリポジトリをクローンして以下のコマンドを入力します。 1. Dockerイメージを作成 2. Djangoプロジェ […]
以下のような、attachmentをつけて即ダウンロードが始まるシステムで、文字コードをShift-JISにする為にto_csv()の引数にencodingをShift-JISに設定しても、ダウンロードするとUTF-8で […]
Djangoでrunserverコマンドを使って開発用サーバーを起動した時にError: That port is already in use.が表示された時の対処法です。 Error: That port is al […]
Pillowを使って画像を合成する方法です。GitHubリポジトリ 上の2つの画像を合成して、下の画像を生成します。 Pillowのインストール バージョン確認 ディレクトリ構造 画像をリサイズ base_image = […]
Pillowを使って画像をリサイズする方法です。GitHubリポジトリ Pillowのインストール バージョン確認 ディレクトリ構造 画像をリサイズ files = glob.glob('./images/*')imag […]
Pillowを使って画像をクロッピングする方法です。ソースコードはGitHubにあげています。 Pillowのインストール バージョン確認 ディレクトリ構造 画像をクロッピング files = glob.glob('./ […]
Djangoで開発をする際にvenvを使って仮想環境を構築する方法です。pyenvがインストールされていてバージョンを切り替えできる状態を前提に進めます。 仮想環境について Pythonで開発していると開発環境では最新の […]
Pythonistaには多くのモジュールがプリインストールされていて、スクレイピングに必要なBeautifulSoupも初めから使える様になっています。そこで、今回はiOSアプリのPythonistaを使ってiPhone […]
DjangoのWEBプリケーションでCSVをpandasで読み込んでforで一行ずつループ処理をしたところ、毎回決まったところで決まったエラーが出たのでPyCharmのデバッグ機能を使って原因を調べた内容です。 プログラ […]
Pythonであるフォルダ内のファイルを別のフォルダにコピーする方法です。 ディレクトリ構造(ファイルのコピー後) directory = (os.getcwd())現在のディレクトリを取得します。 image_path […]
globモジュールを使いディレクトリ内にあるファイルを取得する方法です。 ディレクトリ構造 まずはディレクトリ内のjpgを全て取得します。 directory = (os.getcwd())で現在のディレクトリのパスを取 […]
Djangoのモデル上でDateTimeField型のデータが今日の日付のデータを取得する方法です。 1つ目00:00:00から23:59:59までの範囲を条件に取得します。 2つ目今日の日付が含まれるものを条件に取得し […]
テキストファイルやCSVファイルに書き出す時に文字コードをShift-JISに指定して書き出すとエラーになる場合があります。よく見るのが、-や を変換した時に出るエラーで\uff0dや\xa0と表示されます。 […]
DjangoでWEBアプリケーションを開発していてデータベースの集計などをバッチ処理したいときに、カスタムコマンドを作り実行する方法です。 今回はサンプルとしてmycommandアプリケーションを作成するので以下のコマン […]
DjangoのWEBアプリケーションでQuerySetの表示順を五十音順にしたら、開発環境では五十音順で表示されているのに本番環境では五十音順になっていないときの対処法です。(中途半端に五十音順になっていて、4、5件毎に […]
iPhoneとiPadから使えるPythonistaというアプリを使ってFlaskからHello World!する方法です。 Pythonistaはプリインストールされたモジュールが充実していて、バージョンも2.7か3. […]
Djangoでモジュールを作りviews.pyからimportして呼び出す方法です。 同じ処理を何度も書いたり、同じ処理を複数回呼び出したりするときは、その処理をモジュール化してviews.pyからimportして呼び出 […]
平素は格別のお引立てを賜り、厚く御礼申し上げます。 誠に勝手ながら、弊社では下記日程をゴールデンウィーク休業とさせて頂きます。 2019年4月27日(土)~2019年5月6日(月) 期間中お客 […]
こちらのチュートリアルと同じ内容です。
https://channels.readthedocs.io/en/latest/tutorial/index.html
Python 3.7.0
Django 2.2.2
channels 2.2.0
$ pip install django channels channels_redis
$ django-admin startproject django_channels
以下のディレクトリが作成されます。
.
├── manage.py
└── django_channels
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
python manage.py startapp chat
以下のディレクトリが作成されますが、チュートリアルでは使わないファイルを削除します。
chat
├── __init__.py
├── admin.py
├── apps.py
├── migrations
├── models.py
├── tests.py
└── views.py
不要なファイルを削除した後のディレクトリ構造
chat
├── __init__.py
└── views.py
作成したchatアプリをsetting.pyに記載します。
# django_channels/settings.py
INSTALLED_APPS = [
'chat',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
chatフォルダの中にtemplatesフォルダを作成します。作成したtemplatesフォルダの中にchatフォルダを作成し、その中にindex.htmlを作成します。
この様なディレクトリ構造になります。
chat
├── __init__.py
├── templates
│ └── chat
│ └── index.html
└── views.py
<!-- 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>
index.htmlを表示させるためのviewを作成します。
# chat/views.py
from django.shortcuts import render
def index(request):
return render(request, 'chat/index.html', {})
chatフォルダにurls.pyを追加します。
chat
├── __init__.py
├── __pycache__
├── templates
│ └── chat
│ └── index.html
├── urls.py
└── views.py
# chat/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
django_channels内のurls.pyにも追記します。
# django_channels/urls.py
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^chat/', include('chat.urls')),
url(r'^admin/', admin.site.urls),
]
以下のコマンドを打ってテストサーバーを起動させて、ページが表示されるか確認します。
$ python manage.py runserver
Django version 2.2.2, using settings 'django_channels.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
django_channelsフォルダ内にrouting.pyを新規作成します。
# django_channels/routing.py
from channels.routing import ProtocolTypeRouter
application = ProtocolTypeRouter({
# (http->django views is added by default)
})
settings.pyにも追記します。
# django_channels/settings.py
INSTALLED_APPS = [
'channels',
'chat',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
settings.pyの最下部に以下のコードを追記します。
# django_channels/settings.py
# Channels
ASGI_APPLICATION = 'mysite.routing.application'
再度、テストサーバーを起動させます。
$ python manage.py runserver
コマンドラインに以下の様に出力されれば成功です。
Django version 2.2.2, using settings 'django_channels.settings'
Starting ASGI/Channels version 2.2.0 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。
メーリングリストに登録するとファントムの最新情報をお届けします
お客様のメールアドレスを共有することはありません
Comments
[…] DjangoとChannelsで簡単なチャットサーバーを構築(1) […]