Raspberry Pi & Python 開発ブログ ☆彡

Raspberry PiとPythonの基本的な使い方をわかりやすく解説。初心者、入門者必見!!

SwampDragonの使い方 (その1)

前回、djangoフレームワークの基本的な使い方を紹介しました。簡単にデータベースと紐づいたWebアプリを作ることができました。今回はもう少し踏み込んで、Swampdrgonというモジュールを使い、リアルタイムでWebページのデータを更新する方法を紹介します。

django+swampdragonというイメージで、ほぼdjangoと同じにようにWebアプリを作成していきますので、djangoに慣れている人は分かりやすいと思います。

swampdragonのインストール

まず、pipを使用してswampdragonをインストールします。

sudo pip3 install swampdragon

swampdragonをインストールすると、古いバージョン(1.8)のdjangoのがインストールされてしまいますので、下記のコマンドで最新版のdjangoを入れなおします。

sudo pip3 install django==1.10.4

Redis-serverのインストール

swampdragonで使用する、redis-serverというアプリをインストールします。

sudo apt-get install redis-server 

SwampDragonプロジェクトの作成

Raspberry Piのターミナルで下記のコマンドを実行します。(djangoとかなり似ています。)

dragon-admin startproject プロジェクト名(djtest)

(django-adminではなく、dragon-adminなので注意してください。)

djtestフォルダが生成されますので、cdコマンドで移動します。

cd djtest

次にアプリケーションフォルダを下記のコマンドで作成します。

django-admin.py startapp アプリケーション名(webpi)

(ここはdjango-admin.pyです。今回もアプリケーション名はwebpiとしました。)

このふたつのコマンドでswampdragonプロジェクト/アプリケーションに必要なベースフォルダ/ファイルが自動生成されます。

setting.pyの設定(djtest→djtest→setting.pyのファイルの編集)

djtest→djtest→setting.pyのファイルを下記のように編集します。djangoの時によりも少し編集する項目が増えています。

ALLOWED_HOSTS = ['xxx.xxx.xxx.xxx']

※xxx.xxx.xxx.xxxのIPアドレスはRaspberryPiのIPアドレスになりますので注意してください。

INSTALLED_APPSの中に今から作成するアプリ名を追加します('webpi' 、'swampdragon',を追加)。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'swampdragon',
    'webpi',
]

DATABASESの中の'swampdragon'の記載を削除します。
※これはたぶんswampdragonのバグだと思います。私の環境だけかもしれません。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
    'swampdragon', ←削除する
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


ファイルの一番最後に下記も追加します。
※DRAGON_URLのxxx.xxx.xxx.xxxはRaspberry PiのIPアドレスになります。

DRAGON_URL = 'http://xxx.xxx.xxx.xxx:9999/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

データベースの構築

django(以前のブログ参照)と同様に、下記コマンドでデータベースを作成します。

python3 manage.py migrate

スーパーユーザーの設定

これもdjangoと同様です。

python3 manage.py createsuperuser

・ユーザー名: admin
・メールアドレス: pi@pi.com ※任意
・パスワード: raspberrypi ※任意 あまり短いとエラーになります。
・パスワード(再入力): raspberrypi ※任意

swampdragonフォルダの更新

swampdragonはDjango Ver1.8で動作するように作られており、Django Ver1.10を使うとエラーが出てしまいます。下記サイトのswampdragonファイルはDjango Ver1.10に対応していますので、ファイルを差し替えます。

https://github.com/jonashagstedt/swampdragon


まず、上記サイトを開き、swampdragonフォルダを丸ごとダウンロードしてください。
ダウンロードしたswampdragonフォルダ内のswampdragon_server.pyを開き、下記のxxx.xxx.xxx.xxxの部分をRaspberry PiIPアドレスに変更します。

HOST = getattr(settings, 'SWAMP_DRAGON_HOST', 'xxx.xxx.xxx.xxx')

下記サイトを参考にダウンロードしたswampdragonフォルダ→serializers→model_serializer.pyの’def _get_m2m_fields(self):'関数を書き換えてください。

 https://github.com/jonashagstedt/swampdragon/pull/164/files

def _get_m2m_fields(self):
if hasattr(self.opts.model._meta,'get_all_related_many_to_many_objects'):
        related_m2m = [f.get_accessor_name() for f in self.opts.model._meta.get_all_related_many_to_many_objects()]
else:
        related_m2m = [f.get_accessor_name() for f in [_f for _f in self.opts.model._meta.get_fields(include_hidden=True) if _f.many_to_many and _f.auto_created]]
        
    m2m_fields = [f.name for f in self.opts.model._meta.local_many_to_many]
    m2m = m2m_fields + related_m2m
    return [f for f in self.opts.update_fields if f in m2m]


その後、ダウンロードしたswampdragonフォルダと下記のswampdragonフォルダを入れ替えてください。
/usr/local/lib//python3.4/dist-packages/swampdragon

また、ダウンロードしたswampdragonフォルダ→static→swampdragon→js→dist→swampdragon.min.jsファイルをdjtest→staticフォルダ(新規作成)にコピーしてください。

BootStrapのダウロード

見た目をきれいにするために、下記のURLからbootstrapをダウンロードし、解凍します。

http://getbootstrap.com/

解凍ファイル(css、fonts、jsフォルダ)をdjtest→static(新規作成)に保存します。

jQueryのダウロード

下記のサイトからjQueryをダウロードし、djtest→static→jsフォルダに保存してください。

http://jquery.com/

動作確認

いっきに環境準備、設定を行いましたが、ここでdjango部分が動作しているか確認します。これもDjangoの時と同じです。下記コマンドでWebサーバーを起動します。

python3 manage.py runserver xxx.xxx.xxx.xxx:8000

※xxx.xxx.xxx.xxxのIPアドレスはRaspberryPiのIPアドレスです。

RaspberryPiと接続可能な同一ネットワークにいるWindowsPC等で、ブラウザを開き、アドレスバーに http://xxx.xxx.xxx.xxx:8000 と入力して、Enterキーを押します。ポート番号を入れるのを忘れずに。

It Workedと記載されたテストページが表示されれば、プロジェクトのセットアップは完了です。

次回は、コードを書いてWebアプリを作成していきます。これもdjangoと似ています。