N+1問題のチェックのため、debug toolをインストールしたがエラー
どうやら、バージョンを古くしてやるといいということだった。これで解決。
クラスで試したがなぜかうまくいかない。 クラスのDeleteViewで削除する例は多いが、関数を利用したものが少ない。
関数だと、こんなふうにしたところ、うまくいった。
ファイルサイズ制限をする方法を調べてみた。(画像を圧縮する実装も、それはそれで大変なので、ファイルサイズ制限にしてみた)
https://www.sea2800.com/?p=513
Modelのほうに、コードを入れるほうがいいようだ。
community_photo=models.ImageField("コミュニティ画像",upload_to='community_photos/',null=True,blank=True,validators=[file_size])
ただ、Viewでは関数を使っていたので、若干の注意が必要だった。
とくにViewとFormあたりで、関数なのか、クラスなのかで、いろいろごちゃまぜになりやすい。関数のほうが、カスタマイズしやすいので、Formと一緒に基本的なことをまとめてみた。
#FORM
サイトのページで設定を操作するには、最初、テキストファイルにでも保存するのかと思っていたが、あまりそういう方法は取らないようで、やはり、データベースに置くようだ。
https://blog.narito.ninja/detail/104
上記サイトを参考にさせていただいた。これだと、どのページからでも、グローバルでrequest.site.sitedetail.プロパティ というような感じで読み取れるので、非常にありがたい。また、管理サイトで、編集もできる。
早速、サイトの中でも変更の可能性がありそうな、style変更(colorなど)や説明文等に利用させてもらった。
今回は、フロントエンドの一部をELMでかいてみた。しかし、ちょっとした連係ミスでこまることもある。ELMでブートストラップを使って、ボタンを表示していたが、これが、PCサイズの指定なので、Djangoで、レスポンシブがうまく動作しない。スマホでの表示が、PC表示から切り替わらないという現象が起きた。面倒なので、ELMの表示は、Bootstrapは使わず、すべて、Djangoのほうで統一することにした。
さらに、やっかいなのが、ブラウザには画像だけでなく、JSのキャッシュも残っているということ、もちろんELMもJSなので、ELMをコンパイルしたはずなのに、すぐ反映してくれない。仕方ないので、ブラウザのキャッシュを削除したら解決。
Djangoでは、Testの必要性を感じ始め、少しずつ取り組んでいる。
初歩的ミスから
ちょっとしたことで、だいぶ時間がかかってしまった。
{% if request.user.id==item.created_by.id %}では、だめで
{% if request.user.pk == item.created_by.pk %}が正解だった。テンプレートには、まだなれていない。
Djangoの参考書も読んだが、それだけでは実際のシステムを作り上げる際にいろいろな壁にぶつかってしまう。結局、ネットで情報を仕入れたり、工夫しながらやっていくしかない。最近、いくつかきづいたことをまとめてみた。
・メール送信は、必ずしもサードパーティがいいとも限らない。2,3試したがどれも、自分の環境ではうまくいかず、結局、Djangoの基本機能を利用してうまくいった。(フォームメールなども含めて、そのほうがいいようだ)前回の投稿参照のこと
・画像ファイルのアップロードも、圧縮したい。これは、stdimageためしたが、うまくいかない。Djangoのクラスをうまく継承している、imagekitをためしてようやくうまくいった。
Imageモデルを作成して、それをViewの中で通常の使い方ができる。くせがない感じだ。
image=Image.objects.all().filter(taken_by=profile_id).first()のように
マッチングサイトの足あと機能は、こんな感じでmap活用してなんとかクリア
サードパーティのアプリもあったが、なかなか組み込みが難しかった。djangoのメール配信機能があるので、それを使ってみた。
ポイントは View と 環境変数
win11にしたら、win10まで動いていた古いソフトが動かなくなる。vbrjp200.dllなど、何十年前のVBのランタイムだが、ついにこれだけで動かなくなってしまった。が、よく調べると、otvdmという便利なものがあった。うまく動作してくれた。
windowsでdjangoを、ローカル内で使えるか試してみた。
・ファイアーウオールの受信ポート8000を開けてみた。
ルータのフィルタリングも念のため、確認
これだけではだめだった。
・djangoのallow hostsは['192.....']の形式で設定
・起動は python manage.py runsrver 192.....:8000 とする
この2点をうっかりすると忘れやすい。
マッチングの機能を作成してみた。DjangoのListViewで相手を選択する、選択されるのリスト。マッチしたユーザーのリストを取得するには、どうするかで、けっこうはまる。
ようやく解決方法をみつける。pythonのmap関数、ラムダ式が役立った。