ブログ管理者のP.Hです!
下記記事でdjangoのコードを作成するところまで説明しました。まだ、データベースにデータがないので、エラーになってしまいます。pythonコードからデータベースに値を更新したり、読んだりして、Webページが表示できるようにしてみます。
それでは、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加算する
データベースのクエリのコマンドについては、こちらのサイトが分かりやすかったので紹介しておきます。
動作確認
上記の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とパスワードを設定しています。)
管理サイトのWeb画面を見ていただけばわかると思いますが、AddボタンしてPidataの値をデータベースに追加することができます。とても簡単にデータベースを操作できるので便利です。適当にPidataのpidata1~3に値を登録して、もう一度、webpiのWebページ(http://[Raspberry PiのIPアドレス]:8000/webpi)を開いてみましょう。値が更新されているはずです。
長くなりましたが、djangoの基本的な動作の説明でした。