Raspberry Pi & Python 開発ブログ ☆彡

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

Djangoの使い方:その3

django web

ブログ管理者のP.Hです!

下記記事でdjangoのコードを作成するところまで説明しました。まだ、データベースにデータがないので、エラーになってしまいます。pythonコードからデータベースに値を更新したり、読んだりして、Webページが表示できるようにしてみます。

www.raspberrypirulo.net

それでは、Webページとデータベースを連携させる手順を紹介していきます。

Pythonコードからデータベースの読み書きをする

Pythonのサンプルコード

djangoのデータベースを操作するpythonコードを紹介したいと思います。環境設定が少しわかりにくいかもしれません。pathを間違えないように気を付けてください。

import sys
import os
import django

sys.path.append('/home/pi/workspace/djtest') # プロジェクトフォルダのpathを指定
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djtest.settings") # 環境設定 djtest→djtest→settings.pyを指定

class ControlModel():

    def __init__(self, val):

        django.setup() # djangoをセットアップ
        self.val = val

    def count_up(self):

        from webpi.models import PiData # models.pyのPiDataをインポート
        # プライマリーキー:1があれば、データ更新。なければ、データを作成
        if PiData.objects.filter(pk=1).exists(): 
            self.db = PiData.objects.get(pk=1)
            print('pidata1 : {}'.format(self.db.pidata1)) # pidata1の値を読み込み
            print('pidata2 : {}'.format(self.db.pidata2)) # pidata2の値を読み込み
            print('pidata3 : {}'.format(self.db.pidata3)) # pidata3の値を読み込み    
            self.db.pidata1 = str(int(self.db.pidata1) + self.val) # pidata1にself.valの値を加算する
            self.db.pidata2 = str(int(self.db.pidata2) + self.val) # pidata2にself.valの値を加算する
            self.db.pidata3 = str(int(self.db.pidata3) + self.val) # pidata3にself.valの値を加算する
            self.db.save() # データベースを更新
            print("date update")        
        else:
            print("date create")
            PiData.objects.create(pk=1, pidata1="1", pidata2='2', pidata3="3") # データベースを作成
        
cm = ControlModel(10)
cm.count_up() # models.pyのデータベースの値を10加算する

データベースのクエリのコマンドについては、こちらのサイトが分かりやすかったので紹介しておきます。

qiita.com

動作確認

上記のpythonコードを実行した後、ブラウザに下記のアドレスを入力してください。
http://[Raspberry PiのIPアドレス]:8000/webpi 値が表示されていれば、成功です。再度pythonコードを実行し、Webページをリロードすると各値がプラス10されていくはずです。

管理サイトからデータベースの読み書きをする

管理サイトの作成(djtest→webpi→admin.py)

djangoではデータベースにアクセスする管理サイトが作れ、そこからデータベースの値を簡単に操作することができます。djtest→webpi→admin.pyに作成したモデル(PiData)をimportします。データベースの管理サイトに表示したいデータをlist_display変数に格納します。

from django.contrib import admin
from webpi.models import PiData

class PiDataAdmin(admin.ModelAdmin):
    list_display = ('primary_key','pidata1', 'pidata2', 'pidata3')
admin.site.register(PiData, PiDataAdmin)

データベースの再構築

管理サイトにModelを追加しているので、下記コマンドでデータベースを再構築します。

$ python manage.py makemigrations
$ python manage.py migrate

動作確認

データベース管理サイトを開いてみましょう。djtest→webpi→urls.pyにサイトのURLがデフォルトで設定されており、admin/となっています。ブラウザに下記のアドレスを入力してください。
http://[Raspberry PiのIPアドレス]:8000/admin
IDとパスワードを聞かれますので、createsuperuserで登録したID:admin、パスワード:raspberrypiを入力します。(下記のブログでcreatesuperuserのIDとパスワードを設定しています。)

www.raspberrypirulo.net

管理サイトのWeb画面を見ていただけばわかると思いますが、AddボタンしてPidataの値をデータベースに追加することができます。とても簡単にデータベースを操作できるので便利です。適当にPidataのpidata1~3に値を登録して、もう一度、webpiのWebページ(http://[Raspberry PiのIPアドレス]:8000/webpi)を開いてみましょう。値が更新されているはずです。

長くなりましたが、djangoの基本的な動作の説明でした。