te-touのブログ

音楽制作・車・プログラミング・旅行・その他考えてる事など、備忘録的なことも含めて個人的なページです。

ウェブアプリを作る。7(Djangoのadmin画面作ってテスト入力)




前回、Djangoでモデル(データベース定義?)を作成して、マイグレーションを行いました。
余談ですが、マイグレーションていうのはマッピングと同じような意味合いですかね?
カタカナ言葉が多すぎてよくわかりません。
www.te-tou.tokyo

作成したテーブルに画面から入力テストをしてみました。

admin画面作成

ログインを兼ねた、管理画面を作ります。
admin.pyというファイルを探して、インポート含めて2行書けば画面が出来上がります。

from django.contrib import admin
from shinsa.models import Testee
# Register your models here.

admin.site.register(Testee)
superUser作成

ログイン画面だけ作ってもログイン出来ないので、ターミナルからコマンドでユーザーを作成します。
プロジェクトフォルダに移動して、ちゃんとactivateしてから下記のコマンドを打ちます。
(アクティベートの参考記事)
www.te-tou.tokyo

> manage.py createsuperuser 

表示に従って、名前とかパスワードを入れます。(メールアドレスは特に必要ないらしい)
これで、ログインできるようになりました。

テスト入力

サーバーを起動します。
(サーバー起動参考記事)
www.te-tou.tokyo

先ほどのユーザーIDとパスワードでログインして、
admin画面です。
f:id:te-tou:20200226020538p:plain
いい感じ。



で、試しに入力してみると。
f:id:te-tou:20200226020714p:plain
「受審者」という項目は上手く出来ています。
しかし、「段位」としたかった箇所が「grade_id」。しかも、一桁でいいのに無限(integer分?)に桁数入力が出来てしまいます。

単純に設計ミスですね。
ざっくり命取りです。
元はのソースコードは、

from django.db import models

# Create your models here.
# 受審者テーブル
class Testee(models.Model):
    # testee_id = models.IntegerField()
    testee_name = models.CharField(
        max_length=30,
        verbose_name='受審者'
        )
    grade_id = models.IntegerField()

そりゃそうだわ。ってくらいの感じです。
相手が新人なら、そこそこネチネチ説教するレベルのポカしです。

ソースコード修正。

from django.db import models

# Create your models here.
# 受審者テーブル
class Testee(models.Model):
        GRADE_CHOICES = (
            (1, "初段"),
            (2, "二段"),
            (3, "三段"),
            (4, "四段"),
            (5, "五段"),
            (6, "六段"),
            (7, "練士"),
            (8, "七段"),
            (9, "教士"),
        )
    # testee_id = models.IntegerField()
    testee_name = models.CharField(
        max_length=30,
        verbose_name='受審者'
        )
    grade_id = models.CharField(
        max_length=4,
        verbose_name='段位',
        choices=GRADE_CHOICES
        )

段位をリストから選択できるようにしてみました。
当初の設計思想からはやや外れてきましたが、まあいいかと。SE失格の判断ですが、気楽にやります。

結果。
f:id:te-tou:20200226022156p:plain
上手く動きました。


もはやSQLの知識要らずレベルで簡単に作成出来ます。




ウェブアプリを作る。6(Djangoのモデルを定義して、DBをマイグレーションする。 )




前回まででDjangoの雛形まで作成しました。
www.te-tou.tokyo

次にすることは、テーブル定義の作成です。要は、データベース設計。
基本的に、これがないとやりたいことが実現出来ないと思います。が、これが一番キモとなる部分ですね。
ここでは業務とか本番環境とかではないので、ざっくり適当に作ります。
以前の記事を参考に。
www.te-tou.tokyo

Djangoのデータベース

Djangoの開発環境で使用するデータベースはSQLiteというものになります。
多分、物理的にデータベースサーバーに格納するのではなく、テキストファイルにデータを書き込んでゆく簡易的なものかと思います。
ディレクトリの中にsettings.pyというファイルがあり、その中を覗くとDATABASESという箇所がありdefaultで"ENGINE" :~~SQLite3と記述されています。

Djangoモデル定義

下のソースコードはエラーを修正した後のものになります。

from django.db import models

# Create your models here.
# 受審者テーブル
class testee(models.Model):
    # testee_id = models.IntegerField()
    testee_name = models.CharField(
        max_length=30,
        verbose_name='受審者'
        )
    grade_id = models.IntegerField()

# 段位テーブル
class grade(models.Model):
    GRADE_CHOICES = (
        (1, "初段"),
        (2, "二段"),
        (3, "三段"),
        (4, "四段"),
        (5, "五段"),
        (6, "六段"),
        (7, "練士"),
        (8, "七段"),
        (9, "教士"),
    )
    # grade_id = models.IntegerField()
    grade_name = models.CharField(
        max_length=4,
        verbose_name='段位',
        choices=GRADE_CHOICES
        )
    exam_grade = models.CharField(
        max_length=4,
        choices=GRADE_CHOICES,
        verbose_name='受審段位'
        )

# 採点表テーブル
class scoringsheet(models.Model):
    POINT_CHOICES = (
        (0.0, "0.0"),
        (0.5, "0.5"),
        (1.0, "1.0"),
        (1.5, "1.5"),
        (2.0, "2.0"),
        (2.5, "2.5"),
        (3.0, "3.0"),
        (3.5, "3.5"),
        (4.0, "4.0"),
        (4.5, "4.5"),
        (5.0, "5.0"),
        (5.5, "5.5"),
        (6.0, "6.0"),
        (6.5, "6.5"),
        (7.0, "7.0"),
        (7.5, "7.5"),
        (8.0, "8.0"),
        (8.5, "8.5"),
        (9.0, "9.0"),
        (9.5, "9.5"),
        (10.0, "10.0"),
    )
    RESULT_CHOICES = (
        (0, "不合格"),
        (1, "合格"),
    )
    testee_name = models.CharField(
        max_length=30,
        verbose_name='受審者'
        )
    exam_grade = models.CharField(
        max_length=4,
        verbose_name='段位'
        )
    score1 = models.FloatField(
        choices=POINT_CHOICES
    )
    score2 = models.FloatField(
        choices=POINT_CHOICES
    )
    score3 = models.FloatField(
        choices=POINT_CHOICES
    )
    score4 = models.FloatField(
        choices=POINT_CHOICES
    )
    score5 = models.FloatField(
        choices=POINT_CHOICES
    )
    pratical_points = models.FloatField()
    pratical_result = models.CharField(
        max_length=6,
        choices=RESULT_CHOICES
    )
    written_points = models.FloatField()
    written_result = models.CharField(
        max_length=6,
        choices=RESULT_CHOICES
    )
    judgement = models.CharField(
        max_length=6,
        choices=RESULT_CHOICES
    )

# 審査員テーブル
class markers(models.Model):
    marker_name = models.CharField(
        max_length=30,
        verbose_name='審査員'
    )
マイグレーション

migrationとは、Djangoにどんなデータを格納するのか。という事を指定するコマンドです。
データベースの定義を変更するたびに行う必要があります。
現在作成しているアプリでは下記のディレクトリでコマンドを打ちます。
project
┗ scoring-sheet
┗ scoringsheet<= このディレクトリへ移動します。

> ./manage.py makemigrations

画面がいろいろ動いて、
f:id:te-tou:20200223183920p:plain
エラーになりました。

なんか無駄に全角文字を使ってしまったようです。
なので、修正して。
...その後も幾多のエラーが出ましたが、メッセージを確認しながら修正して
f:id:te-tou:20200224001827p:plain
成功した模様です。
これで、データベースモデルのマイグレーションファイルが出来ました。

マイグレーションファイルが出来たら、マイグレーションを実行します。

> manage.py migrate

画面がいろいろ動いて、
f:id:te-tou:20200224005243p:plain
いろんな設定が確認されて、マイグレーション成功です。

これで、データベース定義が出来ました。




朝起きられない起立性調節障害だった頃。今は結構なんとかなってる。

 

その昔、学生だった頃は朝起きると学校が終わってる時間だったことも星の数ほど。

 

最近は何にでも病名がつくなと思っていたら、起立性調節障害という言葉を知りました。いろいろ見てみると、思い当たる節がザックザクと。

診断されたわけでも何でもないのですが、学生の頃の朝起きられない数多の思い出。

寝起きで動悸や立ちくらみ。なんてまさにずばりな症状です。

 

覚えている限りでも、幼稚園生の頃から目覚めるのにかなり苦労していました。

中学生くらいになると、ひたすら寝続けていた気がします。

高校生でも変わらず。思春期によく寝るのはホルモンの関係もあるそうですが、とにかく朝が起きられない。そのため、学校はもとより友人との約束もバイトも寝坊しまくってました。親に叩き起こされながら、死ぬ思いで学校は行っていましたが。

何なら、卒業アルバムの授業風景写真も居眠りしているところを撮られました。

そもそも自分が「起立性調節障害」なんて思ってもいないので。

 

この頃は「夜起きているのがカッコいい」みたいな、大人びたことをしたい年頃で夜更かししていましたが、その方が当時の私の体調には合っていたような気がします。

世間的にはただの夜更かしで、朝寝坊癖のある人。というだけの感じなのですが、本人にとっては朝起きることは命をすり減らすような感覚です。

幾度となく、「早寝早起き」を実践してみたこともありましたが、朝起きる苦痛から逃れられたことはありませんでした。

それは今、社会人になってはや10数年経った今もあまり変わりませんが。

 

本人からしてみれば病気なんて思ったことは一度もなく、生活時間が世間とあっていないくらいの感覚です。地球の反対側に行けば、規則正しい生活が送れるであろう的な。

周りの人の方がヤキモキしますね。こういうのは。

なんで普通のことが出来ないのかと。

 

知らんよ。世の中規則正しすぎて気持ち悪いわ。

なぜみな同じ時間に人混みを作って動いている?と思春期全開の斜に構えた思考。

精神的にグレてます。

 

大学生・社会人となって朝起きられずいろいろありましたが、大人になってみれば仕事に行かなくちゃ。ということで朝起きて出社するなんてこともできるようになりました。いまだに寝坊はするけど、大人になれば結構何とかなります。

 

なんかネットをみてると本人もとより、親が朝起きられない子供について悩んでいるような記事をよく見かけます。

経験者だけども他人事だから思いますが、朝起きられないのはどうにもなりません。出来ないことは出来ないから。寝坊して怒られたり何なり経験して大人になれば、意外と世間の生活と上手く付き合えるようになって行きます。

朝起きられない事を無理に治そうとして知識だけつけても、身の振り方がわかってなかったら意味がないです。

大人になって遅刻したときに上司同僚その他に嫌味を言われない人間関係の作り方を、学生のうちに寝ながら考えれば良いのではないかと思います。

 

大事なのは、何事もするりと通り抜ける身のこなしかなと。

 

 

 

アルファロメオ ペーパークラフト4(タイヤ一個完成)

 

ペーパークラフト アルファロメオ ジュリア1300GTA

f:id:te-tou:20200125024205j:plain

 細々と作ってます。

ほんとに細かい部品をチョキチョキチョキチョキと、根気が必要な作業です。

でも会社に遅刻することを恐れず、深夜の静寂の中で作業をしていると無の境地に達することがあります。その時は手先だけが無心に動いています。

これはほんとに異次元の感覚です。

 

で、今はホイールとタイヤを作っています。

f:id:te-tou:20200220021322j:plain

これはホイールの部品。

 

一つだけ出来てます。ちゃんと説明書を読んでるつもりでも、裏表逆に作ってしまうのが恐ろしいところです。4つ連続で・・・目立たないところだからまあいいか。

f:id:te-tou:20200220022053j:plain

ホイール部分が4つ出来て、これはタイヤを作っているところです。

丸いところを丸く作るのは本当に困難な作業です。黒い紙を数枚貼り合わせてタイヤを作っていくのですが、そこそこ綺麗に切り取ったつもりでも白いのり代が見えてしまっています。この辺りのチリ合わせができるかどうかが初心者と上級者を分ける壁と実感しました。

にしても、ギザギザに切り抜くのがほんとに大変です。

 

そんな部品を切って貼って組み立てると、タイヤが一個出来ました。

f:id:te-tou:20200220022824j:plain

切り抜いた部品を無くさないように注意です。

 

完成形の画像がアマゾンの商品紹介画像に使われていましたが、その完成度に驚愕です。一体何個作ればあんなに上手くできることやら。

 

作ってみないとわからないこの感覚。経験することは何より大事だと思います。

 

 

ホンダビートPP1 国道16号の横田基地周辺をドライブしながらiPhone11とAppleWatchで撮影してみる。

 

なんとなくエキゾチックな雰囲気漂う、国道16号の横田基地周辺はお気に入りのドライブスポットです。


ホンダビート PP1 国道16号横田基地周辺を夜ドライブ~Driving around YokotaAirBase Route16 at midnight with HONDA BEAT PP1~

 

2019年4月に国道16号の横田基地周辺をドライブした動画をyoutubeへ投稿しました。そのとき使っていたのが、iPhone6 plusです。その時点でかなり古い機種ですが。

その後、2019年秋にiPhone11に交換しました。

カメラはすごく綺麗に撮れるなと関心しました。ナイトモードとかすごいですね。

一時は特に意味なくアンチAppleでしたが・・・。 

www.te-tou.tokyo

仕事でなければ、でっかい一眼レフカメラなんか持たずにiPhoneで十分かなとも思います。海外なんていくときは特に荷物は少なくしたいので、iPhoneで完結できるなら尚更吉です。Google Pixelも気になってます。

ただ、仕事で依頼されて撮影にいく時は流石にiPhoneというわけにはいかないので、一眼レフを使いますね。見た目重視です。

 

さておき、車内にiPhoneを固定してApple Watchで撮影開始・終了のリモートコントロールができるのはとても便利です。Apple Watchでどんな風に映っているかモニターもできるので。(もちろん、停車してカメラを固定しているときや信号待ちの時だけ。)あんまりインカメラを信用していないので外っかわのカメラで撮影しています。実際、どの程度違うのかはよく分かりませんが。

 

ただ、不便なのは「ビデオ」モードで撮影していない時、一定時間を超えるとiPhoneがスリープになります。再度立ち上げると「カメラ」モードに戻ってしまうので、iPhoneを固定しているところから外して、もう一度「ビデオ」モードにセットしないといけないのがめんどくさいです。

もしかしたら設定できるのかもしれませんが。

 

ともあれ、なんか振動が多いので結構ブレブレの映像になってしまったなと思いつつiPhone6 plusで撮影した時の物と比べたら遥かに綺麗に撮影できてました。


Driving around Yokota air base

技術の進歩はすごいなと、関心しきりです。

 

あとは車内もPivotメーター取り付けたり、ルームミラー一体型のドライブレコーダー取り付けたり最新化を図ってます。以前はこんなんだったか〜と映像を観ながら物想いにふける自己満足には最高のつまみです。

 

いつ壊れるかわからない車に回収できない投資をし続ける。資産形成的には最悪の所業ですが、趣味の世界の怖いところはそれがまかり通るところですね。

あとは、どっから資金を調達するか・・・。

f:id:te-tou:20200209162500j:plain

 

 

 

最近ギターが弾きたくなってJacksonギターを弾いてみた。

 

2年ぶりくらいに弦交換をしました、Jacksonギター。

 

ミドルピックアップの音が最高で、クランチサウンドでカッティングするのが気持ち良いギターです。


【クランチサウンドでカッティング】 JacksonのギターミドルPU

 

ギターの録音をする際には欠かせない逸品です。

f:id:te-tou:20200215193430j:plain

ピックアップセレクターが時代を感じさせます。

今の時代、流行らない形のギターですね。親族から借り受けて20年くらいたちましたが、最高のミドルピックアップです。当時はベタベタにステッカー貼りまくってたみたいです。

f:id:te-tou:20200215193528j:plain

フロイドローズのオリジナルが付いていて、もはやボロボロです。

なんか、アームを使うとチューニングが狂いもはやフロイドローズの意味がありません。ちゃんとメンテナンスしないとですね。弦交換も結構めんどくさい。けぢ、フロイドローズはカッコ良くて好きです。

f:id:te-tou:20200215193715j:plain

いわゆるジャクソンヘッド。

f:id:te-tou:20200215193850j:plain

シリアルナンバー入り。いつの年代の物かは不明です。

この赤色が深みがあって良いですね。

 

www.te-tou.tokyo

昔制作した作品集です。 

www.youtube.com

 

 

プロジェクトをGitHubへプッシュする。

 

 前回Djangoで作成したプロジェクトの雛形をとりあえずGitHubへプッシュします。

www.te-tou.tokyo

まず、やること。 

GitをローカルPCへインストールしておきます。

ユーザー登録(名前とメルアド)しておきます。

$ git config --global user.name "GitHubに登録したユーザーネーム"
$ git config --global user.email "GitHubに登録したメルアド"

以下のコマンドで登録内容を確認します。

$ git config --global --list

 

GitHubにリポジトリを作成します。

これ自体はポチポチ「Repositories」のところで「New」とかクリックしてけば、そこまで迷うことなく作成できます。チュートリアル記事もたくさんあるので。

push先を設定する

先ほど作成したGitHubのリポジトリのHTTPSアドレスを確認します。

右下あたり緑の「Clone or download」ボタンを押下するとURLが表示されます。

f:id:te-tou:20200214003718p:plain

このURL確認した上で、プロジェクトフォルダのルートへ移動します。

前回の作成したプロジェクトの場合。

project

    ┗ scoring-sheet<= ここ

        ┗ scoringsheet 

            ┗ scoringsheet 

            ┗ shinsa

 

以下のコマンドを打ちます。

$ git remote add origin さっきのURL

プッシュ先が設定できたはずです。

 

しかし、以下のエラーが出た場合

→ fatal: remote origin already exists.

すでにoriginが存在しているということのようです。

 

なので、下記のコマンドで一度originを削除します。

$ git remote rm origin

 その後、もう一度originを設定します。

$ git remote add origin さっきのURL

 これで設定ができたはずです。

 

pushする

以下のコマンドでリモート先に資産をプッシュします。

$ git init <= ローカルリポジトリが作られる
$ git add -A <= ソースをgitのローカルリポジトリに追加
$ git commit -m"initial commitとかなんかメッセージ" <= コミット
$ git push origin master

 普通の人は、これでGitHubへのプロジェクトのプッシュができます。

エラー発生

しかし私の場合、いつも何かしらトラブルが起こります。

f:id:te-tou:20200214010248p:plain

 エラーです。

多分、一回間違えて別のリポジトリに間違えてプッシュしてしまったのでそれが原因かと思い"git remote add~"でリモート先を変更したのですが、このエラーが出てきました。

尚且つ、ネット情報を参照しつつ色々試しましたが解決しませんでした。

リポジトリを強制更新

イライラしたときは、強制更新です。

$ git push --force origin master

 どうにもならない事は、どうにもなりません。

これで無事にGitHubへのプッシュができました。

 

以前の記事に強制更新も含めて書いてます。

www.te-tou.tokyo