2023年8月24日木曜日

Django/PythonでのWebアプリ開発を更に勉強

 開発環境の構築は出来た(アプリの方はうまく動かなかった)ので、何か動くWEBアプリを一つ作って体験してみたいと、Right Codeのココを見ながらWeb日記アプリを作ってみました。 

これも、1から一つづつ追っかけて行き、丁寧に模倣したつもりでしたが、2位のところでエラーが出て起動できなくなってしまいました。 1日がかりで調べてみると、そもそも記事の中のコードに幾つかfrom .... が欠落していました。 例えば、views.pyは最終的には、

from djanog.view.generic import TemplateView, CreateView, ListView, DetailView, UpdateView, DeleteView

from django.urls import reverse_lazy

from .forms import DiaryForm

from .models import Diary

が、必要ですが、Webで提示されていたコードには幾つかが示されていませんで、ググったりして、この部分をエラーフリーにするために一日がかりでした。

で、作業中に気が付いたのですが、python manage.py runserverで動いていると、xx.pyのコードの書き換えは即座に反映されるので、書き換えにエラーがあれば、runserverを起動させた画面にエラーの詳細が表示されるので、作業を迅速に進めることが出来ます。

従って、開発に際し)

0)conosole x 2, emacs x 1, forefox x 1を立ち上げる。

取り敢えず起動している状態 
1)スケルトンで良いので起動できる物を起動させ、firefoxで表示を確認、起動画面でエラー表示が見えるようにしておく。 (左は、コンソール2画面、emacs、firefoxで上のコンソール画面でpython manage.py runserverして起動させている状態)

 

typoで起動画面でエラーとその場所が示される
 

2)emacs(エディター)で、必要なファイルの書き換えを行い、saveする。

 

 

 

修正すると起動画面でエラーが出なくなる
3)起動画面にエラーが出たら、エラー箇所の修正を行い、saveし、エラーが出ないことが確認できるまでこれを繰り返す。

 

 

 

4)エラーが出ずに、firefoxにも期待した物が表示されることを確認。

 これを完成するまで繰り返す。 但し、templateの修正エラーはこれでは捕捉できないようです。

また、このシリーズの第一回の所でのプロジェクトの作成の所では、プロジェクト用のフォルダーを自分で作り、其処へ移動してdjango-admin startproject config . となってます。 この方が、別の記事で書いてあった、django-admin startproject xprojectとして、xprojectというプロジェクトフォルダから作らせて、xprojectフォルダの中のxprojectというフォルダの名前をconfigに書き換え必要な修正を加えるより、手間が省けるし、間違いがありませんので、この方法ですすめる方が良いと思います。 (残念ながら、django-admin startproject config xxxxとしてxxxxというプロジェクトフォルダーを作らせて更にconfigというフォルダにする、という事は出来ませんでした。)

htmlに係るファイルを全て親フォルダ配下のtemplateに纏めて、ここでhtmlに係る作業をするとか、staticというフォルダにcssやjs、imgを集約するのは後々とても効率的に作業が出来そうです。 

apache24から仮想環境のpython/djangoにアクセスする方法は一応確認して、動くよう(但し、ファイル階層が正しく反映されるのか、まだ十分に確認できていない)なので、多分python/django環境に移行するのもそんなに難しくは無いように思います。

少し要領が分かってきたので、追々何か作ってみたいと思います。


 

 

2023年8月14日月曜日

Python webframework Djangoをお勉強してみる

最近の世の中の流行りに押されて、pythonを少々お勉強しています。「予測に生かす統計モデリングの基本」とか「Pythonによる統計学入門」「ベイズ統計入門」とかベイズ統計と一緒にpythonも復習と思ったのですが、ベイズ統計の方がムズくて頓挫。 

では、pythonでweb書いてみようとドキュメントに従って書いてみました。 (今、自宅近辺の温度湿度を表示させるweb appがphpなので、将来的にpythonにしようかな?と思い、その為の予習のつもりで勉強しています。 データのグラフ化のライブラリpythonにも対応しているので、少しpythonで書き換えれば動くものが作れるはず!!)

pythonではDjangoってweb frameworkがあるようなので、このドキュメントに従って、サンプルアプリを作ってみました。 DjangoにはDBとしてsqlite3が付いていますが、将来実装する時の手間を考え、既に使用しているpostgresを使う事にしました。 

 0)Pythonの開発用仮想環境を構築する 

  取り敢えず、application_environmentというフォルダを作って、ここに開発環境をココできての説明に従い作ってみました。python -m venv application_environmentでapplication_environmentが出来、source ./bin/activateでこの環境を使った開発が出来るようになるみたいです。(python開発関連の165 directories, 1357 filesが出来ていました)

  このディレクトリで、 pip install djangoとして、djangoをインストール

    更に、django-admin startproject mysite でmysiteというフォルダを作りこのフォルダの中で作業をしました。 この作業でmysite配下に左のようなファイル構造が出来上がります。 これ以降はmanage.pyで色々な作業が出来るみたいです。


1)DjangoでPostgreSQLを使えるようにする。

  ここの説明に従いpostgreSQLにDjangouserを作成して、djangoからのアクセスが出来るようにしてみましたが、

    $python manage.py migrations;  python manage.py migrate


で失敗して、うまくdatabaseが作成できていませんでしたので、PgAdmin4 v7でpostgresqlの中を覗いて見た所djangouserに create database権限が与えられていないようなので、これを設定して無事djangoからpostgresqlに接続設定できるようになりました。

 

 

 

2)Django のtutorialに従い簡単なアプリを作成してみました。

  1~6までをまじめにフォローしながら、逐一実行、確認してゆきました。DBの作成がmodels.pyにDBの仕様を書き、python manage.py migrateで行うと、関連する テーブルが自動で作成されていますが、QuestionとChoiceの二つのテーブル作成に対して、全部で12のテーブルが作成されていました。(うーん、何に使うんだろう?) 

       夫々の詳細な内容はtutorialを参照してください。

  データベースが出来た所で、python manage.py shellでpythonのコマンド入力でデータベースの内容を参照したり、書き換えたりすることが出来るのは、とても面白い機能ですね。   

python manage.py runserver を適当な窓で実行してブラウザで当該ページにアクセスしてみると左の様にサーバログが表示され、テスト環境でのチェックがスムーズに出来そうです。 

また、on the flyでファイルを書き換えても、書き換えた内容が即座に反映されている(一部、そうでない場合があったような気がしますが、??)のと、書き換えたファイルにエラーがあるとログにエラー内容が表示されるので、小さな修正などが簡単に出来そうです。

 

右では、赤で囲った部分から、typoエラーが示されており、これを修正してファイルを上書きすると、そのままサーバがチェックしてくれて、今度は待ち受け状態になって起動しています。

 

また、作成されるファイルシステムの中にtests.pyがあり、ココに必要なソースを書いておけば、いつでも走らせて検証することが出来る(初めから検証プログラムが書かれることを前提としている)のは非常に優れている(というか、今様)な仕様だと思います。

ま、WEB Frameworkってどれも、ファイル構造が大きく、幾つも似たようんファイルが作られるので、鬱陶しいと思っていますが、djangoも同じですので、慣れるより仕方ないですね。

tutorialに従って作成したpollsの最終的なファイル構造は下の様になっていました。

このうち弄っているファイルは、

models.py, 

tests.py, 

urls.py, 

views.py,と 

static/polls/style.css, 

static/polls/images/xxx, 

templates/polls/(detail,index,results).html

です。

アンテナ切り替えの自動化 (続き)

 調子よく動いていると思っていたら、インジケータのLEDが次々と点かなくなってゆく、、、。 不精して、出力端子(14Vのon/off)にLEDを直列抵抗と入れていたのですが、これではダメっぽい。 LEDが死んでいる。 では、という事でFETのスイッチを入れて、ゲート電圧で検出して...