ギャバンITサービス
お菓子の家が作れるシステムエンジニアです

djangoをdockerコンテナで利用(4) - ログイン画面作成

ログインしないとページが見えないようなアプリケーションを構成する。 その(1) 、 その(2) 、 その(3) では環境を作り、処理を作っていくための習作みたいなもの。 元々はphpで作って使っていたものを、djangoで作り直すのが目的。 phpで5年前に事務処理用で作ったものを、 djangoでこれから作り直す(円グラフはサンプルしかできてないけど・・・)。 やっとログイン画面と、その中のアプリの1つ目が使えるようになったのでその作成メモ。 ログインして見えるアプリケーションができるまで 「あーでもない、こーでもない」ってしばらく悩みながらdjangoいじった後、結局完成した後でgitの差分を見て書いてるのな。 アプリケーションとして「gvisWebApp」を追加して自動生成された内容に、⭐️印の箇所を編集してった。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 /code/app |--gvisDjango3 | (省略) |--gvisWebApp | |--__init__.py | |--__pycache__ | |--admin.py | |--apps.py | |--migrations | |--models.py | |--tests.py | |--urls.py ⭐️ | |--views.py ⭐️ | |--templates/gvisWebApp ⭐️手動作成 | | |--base.html ⭐️手動作成 | | |--login.html ⭐️手動作成 | | |--logout.html ⭐️手動作成 | | |--home.html ⭐️手動作成 | | |--gvis_001_IntraIchiran.html ⭐️手動作成 |--manage.py |--requirements.txt |--templates | |--gvisDjango3 | | |--gvisDjango3Top.html |--website | |--__init__.py | |--__pycache__ | |--asgi.py | |--settings.py ⭐️ | |--static | | |--admin | |--urls.py ⭐️ | |--wsgi.py ログインはdjangoに基本機能があるらしい phpのときはログイン画面を実装している人がたくさんおられたので、参考にして作った。 ...

 ⭐️

ダークモード使いたい

普段使うアプリケーションはa5sqlとかvscodeはダークモードあるけど、beckyやcyberduckにはない(そのうちできるんやろけど)。 webページ見てると、白い背景のページは目が痛くなってくる。 背景が黒のほうが嬉しい。 ダークモードの切り替えができることに気づく 自分のメモとして作っているこのサイトは、cocoonから選べるダークテーマを使ってた。 作者さんありがとう。 Cocoonスキン『ダークスキン』の特徴 | Cocoonスキン確認サイト zvalinf.info django導入で静的サイトを作ってみたくて、とても苦手なcssを自分でいじりはじめたとき、ダークテーマとそうでないテーマを切り替えてくれるjavascriptがあることに気づいた。 作者さんありがとう。 Webサイトをダークモードに対応させよう | Webクリエイターボックス www.webcreatorbox.com 「Darkmode.js」Webサイトを手軽にダークモード表示に - 株式会社ネディア │ネットワークの明日を創る│群馬 www.nedia.ne.jp django導入の過程で、templateフォルダに置いたhtmlの最初のほう(titleってあるあたりの次ぐらい)にこう書く。 1 2 <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/darkmode-js@1.5.7/lib/darkmode-js.min.js"> </script> さらにimg srcのちょっと下あたりにこう書く。 1 2 3 <script> new Darkmode().showWidget(); </script> すると画面右下に黒いマルが表示されるようになって、ポチポチ押してみると背景が切り替わる。 なるほど、iphoneとかandroidタブレットで開いてもちゃんと表示される。 このhtmlはヘッダ部分で、djangoのtemplateの中では読み込みファイルのなんだけど、body部分にも適用してくれる。いったいどうなってんだろう。 html苦手なので理由がさっぱりわからん。 次に、これを自分のメモサイトでも使えないか探してみた。 wordpressでcocoonのテーマをダークモードのボタンが出るように変更 黒基調で作られたテーマ使ってたのを、さっきの黒いマルをポチポチした操作で切り替え可能なテーマというのが存在するらしい。 下のほうにある「ダークルリ」を「SILK」に変更してみた。 このテーマはダークモード切り替えに対応したスキンらしい。 作者さんありがとう。 dateqa.com wordpress画面の「外観」にあるfunction.phpに1行追記するとできるらしい。 1 define('SILK_SWITCH', true); 追加した箇所は最初のほう。9行目にdefine('SILK_SWITCH',true)って入れといて、「ファイルを更新」のボタンを押す。 ...

djangoをdockerコンテナで利用(3) - django3でグラフ作成

自前DBには計算して表示させる内容とか、blob列にpdfやjpegを入れてる。 そういうのをdjangoから扱うための基礎動作確認ページを作っておこうと思った。 php7.4のコンテナにimagick追加して苦労して表示させてるのを、djangoだと一発で表示できる。円グラフのpng画像が表示できることを目指す。 ubuntu20でdockerコンテナ動かして、django取り扱いやってみるか。 グラフ表示できるようになるまで グラフを表示させるために、処理を追加するんだけど、表示ができるようになるまでの解説ページがなかなか理解しづらかった。 円グラフ表示できるようになってからは、日本語フォントの扱いがなかなかうまく行かず、2日ぐらいは悩んだ。 それでも、円グラフが縦長表示になる問題が残って、htmlのimg srcの表示をいじった。 次に円グラフに注釈が入ってほしくて、ググって見つけたソースを下敷きにしてやってみた。 何もない状態から、最終的にはこんなグラフが表示できた。 djangoでいじった順番 websiteのプロジェクトを作っておいて、gvisDjango3アプリケーションを既に追加してあり、html表示させるためのテンプレートも作ってある。 linuxに djangoのdockerコンテナ作る とこと、 hello worldから始まってDB読むところ は別のところにメモった。 以下、いじった順番。vscodeのGitGraph見たらこんな感じやった。 ライブラリをrequirements.txtに追記してグラフ描けるようにする テンプレートにグラフの画像を描かせる場所を追記する 画像表示させるリクエストに応答するための追記をする グラフを描かせる 微調整 いじった箇所は⭐️の4箇所。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 /code/app |--gvisDjango3 | |--__init__.py | |--__pycache__ | |--admin.py | |--apps.py | |--migrations | |--models.py | |--tests.py | |--urls.py ⭐️3 | |--views.py ⭐️4,5 |--manage.py |--requirements.txt ⭐️1 |--templates | |--gvisDjango3 | | |--gvisDjango3Top.html ⭐️2 |--website | |--__init__.py | |--__pycache__ | |--asgi.py | |--settings.py | |--static | | |--admin | |--urls.py | |--wsgi.py グラフ表示やってみる ライブラリをrequirements.txtに追記してグラフ描けるようにする なんていうライブラリがあるんだろー、からググってmatplotlibでいろいろできそうってことがわかった。 ...

 ⭐️

データベースの取り扱いについての愚痴

データベースの取り扱いは、どんな言語からでもやっぱり一苦労する。 メインフレームのcobolからDB2につなぐときのlinkage sectionは何て書いたらいいのかとか、CやVBから接続するときの関数はどう書いたらいいかとか、sqlserverからsqlcmdで抜いたcsvをpostgresqlに放り込むにはどうしたもんかとか。 jdbcでoracleからデータ読み込むけど、awsのauroraとかdb用のec2作ってoracle卒業してもいいんじゃないかってとき、データ移すのたいへんだったりする。 実務ではデータありきで処理を作っていくことのほうが多いんじゃないか。 railsを扱ったときもそうだったけど、今はコードの中にSQLを書いたりしないらしい。 こうすると、どんなデータベースを扱っても方言が出ない気はする。 じゃあSQLなしでレコードを扱う方法はどんなんかなって見てみると、「テーブルにカーソルあてて1件fetch、そこからあとはgetnext、getnext」みたいな感じ。 自分にはあまり直観的じゃないなぁっていうか、IBM製品っぽいまわりくどいやり方でちょっと苦手。 レコードを登録することがコードの一部になっていて、理解が足りてないときに「rake」やると(railsのmakeのこと)、データが全部吹っ飛んで「えー、なんでー」ってなったことがあった。 dockerの永続化領域にデータが入ったDBMSなら、こんな状態はいくらでももとに戻せるし、あまり大したことではない。 データが吹っ飛ぶという恐怖体験は克服できるけど、自前処理のphpを別の言語に切り替えたいって考え始めたとき、やっぱりrailsを選べなかった。railsのドキュメントすら読む気持ちにならなかった。 プログラミングや技術にはパラダイムがある。そういうのは否定しないし、苦手ではあるけど、適応しなきゃとは思う。 MVCとかMTVという考え方を否定はしないけど、IT資産のうち累積されたデータベースやファイルのコストっていうのは、コードやシステムよりも高価で価値があると自分は思っている。 だからrakeでデータが吹っ飛んだときは心底「なんでDBの中全部吹っ飛ばすねん!」ってrailsの動きがまったく納得できなかった。コードがデータを支配しているように感じた。 modelを使うとDBMSをあまり意識しなくていいし、「sql書かなくて済む」というメリットはあるのかもしれないけど、最近はsqlが書けないエンジニアもいて(ひどいときはDBMSを意識してない人もいる)、一緒に仕事すると残念な気持ちになることがある。 特に開発フェーズの最後のほうとか、運用に入ったシステムのパフォーマンスを上げていきたいとき、地味にsqlの書き方を変えたり、インデックスつけてみたり、バッチの構成を変えて対処していくことがある。 そういうドロ臭い作業には、今のプログラミングや技術が対処できる余地は少ないように思う。それは自分がまだ知らないだけで、実は方法や手段があるのかもしれない。 djangoを選んだのは淡い期待をこめてのこと。railsで味わった嫌な記憶はあるけど、気を取り直してデータベース取り扱いやってみたい。

docker-composeのバージョン上げ

githubにdocker-composeあるので、ときどき最新を取り直す。 参考 現在利用中のバージョン確認 入れてるかどうか確認する。 入ってると応答が戻る。 1 2 3 $ which docker-compose /usr/local/bin/docker-compose $ 利用中のdocker-composeバージョンを確認する。 1 2 3 nari@nafslinux-ubu22:/docker$ docker-compose --version Docker Compose version v2.6.0 nari@nafslinux-ubu22:/docker$ バージョン上げに失敗したらイヤなので、今あるバージョンをアンスコ付きのファイル名で退避しておく。 1 sudo mv /usr/local/bin/docker-compose /usr/local/bin/_docker-compose 最新バージョンの確認 公開されているバージョンを確認する。さっき見たらv2.6.1が出てた。 docker-composeの公開バージョン ベースOSのバージョンアップのときだけ、ついでにやってる。 バージョン上げる どこかテンポラリフォルダに移動して、その中に取得してから本来に位置に設置。 うまく取れなかったら、アンスコつけて退避したdocker-composeから戻す。 1 2 3 4 5 6 7 8 9 10 11 12 13 $ cd _tmp $ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o ./docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 633 100 633 0 0 2205 0 --:--:-- --:--:-- --:--:-- 2205 100 12.1M 100 12.1M 0 0 11.7M 0 0:00:01 0:00:01 --:--:-- 21.9M $ ls docker-compose $ sudo chmod +x ./docker-compose $ sudo mv ./docker-compose /usr/local/bin/ $ docker-compose -v docker-compose version 1.29.2, build 5becea4c $ 稼働確認 起動と停止をやってみる。 docker-compose.ymlをちゃんと処理できてくれてたらOK。 ...