Python アンチパターンに
この
The Little Book of Python Anti-Patterns — Python Anti-Patterns documentation
結果を
[TOC]
アンチパターンの カテゴリに ついて
以下、
一通り
Maintainability
Security
Correctness
Performance
Migration to 1.8
詳細
Maintainability
- Importing django.db.models.fields
from django.db.models import fields
とimport し、 field 配下の、class Person(models.Model): first_name = fields.CharField(max_length=30) last_name = fields.CharField(max_length=30)
Field で、 Model の Field を 定義するのではなく、 from django.db import models
とimport して、 とclass Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
記述できるため、 この 記載の ほうが、 無駄 import が 少なくなるので、 推奨されるべきだ。と いう ことかと 思います。
Security
サーバ公開時には、
ALLOWED_HOSTS setting missing
Django では、DEBUG = False の 場合、 ALLOWED_HOSTS 設定を 適切に 設定する 必要が あり、 この 設定を Production 環境では 有効に すべきと いう、 ニュアンスの 内容が 記載されています。
Blog のHost 設定は、 DEBUG = False
で、ALLOWED_HOSTS
も設定している ため、 特に 設定変更は 実施しませんでした。 SECRET_KEY published
settings.py に、SECRET_KEY
を記載すると、 SCM の パスワードが 割れたりした 場合、 アプリケーションが 乗っ取られるので、 SCM とは 別に、 外だしして 管理すべきとの ことが 記載されています。
自アプリケーションのsettings.py は、 外だししていなかったので、 テキストファイルに 記載し、 その 内容を 読み出すようにしました。 with open('/etc/secret_key.txt') as f: SECRET_KEY = f.read().strip()
Same value for MEDIA_ROOT and STATIC_ROOT
英文の意味が あまり 理解できて おりませんが、
MEDIA_ROOT とSTATIC_ROOT は 異なる 値に する 必要が あります。
同一パスだと、MEDIA_ROOT が、 STATIC_ROOT の FallBack 先と して 使用される ため、 セキュリティの 問題を 引き起こす 可能性が ある 的な ニュアンスの ことが 記載されています。
あまり
- Same value for MEDIA_URL and STATIC_URL
セキュリティリスクがあるため、 MEDIA_URL と、 STATIC_URL は 同じ URL に しない ほうよい。と いう 内容です。
Same value for MEDIA_ROOT and STATIC_ROOT
にも関係しますが、
設定 | Django documentation | Django
に該当する 記載が ありました。
上記ドキュメントからは、以下が リンクされています。
Django における セキュリティ | Django documentation | Django
セキュリティ関連記述でどちらも 一読しておいた ほうが よいと 感じました。
Correctness
Not using forward slashes
Django はWindows 環境でも パス文字列と して、 /
を認識するので、 \
を使用しなくても いいです。
これは、Linux 環境で 稼働させていると いう こともあり、 該当しませんでした。 Not using NullBooleanField
True とFalse のみが 取り得る 値の フィールドの 場合は、 BooleanField を 使用すべきで、 NullBooleanField は、 Null を 値と してとる 場合のみ 使用した ほうが よいと いう 内容に なります。
これは、該当しませんでした。
Performance
- Inefficient database queries
Django のModel は SQL を 隠蔽化する ため、 何も 考えずに、 Cars.objects.all()
等を記載していると、 パフォーマンスが 出ないので、
values()
や、values_list()
を使い、 取得項目を 制御した ほうが パフォーマンスが 出ます。
該当記述は特には なかったですが、 今後意識したい ポイントでは あります。
Migration to 1.8
下位の
これは、
過去に
Django 1.8から
settings.pyの TEMPLATESが 非推奨に なって 警告が 出力される。 | Monotalk Django 1.8以上で、
settings.py に TEMPLATE_DEBUG に 相当する Optionを 指定する | Monotalk
項目と
- TEMPLATE_DIRS deprecated
- TEMPLATE_DEBUG deprecated
- TEMPLATE_LOADERS deprecated
- TEMPLATE_STRING_IF_INVALID deprecated
まとめ
Django アンチパターンに
アンチパターンからの
静的解析ツール好きと
Python 側は
以上です。
コメント