Django

update create

version 3.2

generate secretkey

python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'

Check deprecated.

python -Wa manage.py test

version 2.1 を基準に記載 Roadmap

Security

目を通しておくこと
Django におけるセキュリティ

AppConfig

https://docs.djangoproject.com/en/2.1/ref/applications/

File Size

FileStorageから取得

path = model_instance.filefield.path
print(model_instance.filefield.storage.size(path))

cf. ContentFile & Storage

Admin Site

登録時のリストの並び順を考慮する場合は、modelのMeta定義に従う。

class Tag(models.Model):
    class Meta:
        verbose_name = _('tag')
        verbose_name_plural = _('tag')
        ordering = ['title']
    title = models.CharField(_('title'), max_length=255, unique=True)

個別に行う場合は、

@admin.register(Ref)
class RefAdmin(admin.ModelAdmin):
    def formfield_for_dbfield(self, db_field, **kwargs):
        field = super().formfield_for_dbfield(db_field, **kwargs)
        if db_field.name == 'tag':
            field.queryset = Tag.objects.all().order_by('title')
        return field

最適化したい

django-htmlmin
YUI complessorとかuglifyとか
なんかー

<?xml version="1.0" encoding="utf-8" ?>
<svg baseProfile="full" version="1.1"

<?xml version="1.0" encoding="utf-8" ?> <svg baseProfile=full  version=1.1  

に変換される。
ということで却下。

標準ライブラリ

from xml.dom import minidom
dom =minidom.parseString(xml)
# dom = minidom.parse(xml)
svg = dom.toprettyxml(indent='', newl='')
# svg = dom.toxml()

属性間の余計な空白は除去される。
インデントとコメントはそのまま。
いい感じにするには、自前でコーディングする感じかなぁ?
なかなかいいのがないなぁ、、

https://pypi.org/project/htmlmin/

https://pypi.org/project/html-validator/

力技

find . -path ./.venv -prune -o -name 'locale' -type d -print | xargs -I@ dirname @ | xargs -I@ echo "cd @ && ../manage.py compilemessages && cd ../;"

カスタムタグ&連携

<img src="/svg/color/{{ forloop.counter0 }}/">
<img src="{% url 'svg:color' forloop.counter0 %}">
<img src="{% datauri 'svg:color' forloop.counter0 %}">
{% render 'svg:color' forloop.counter0 %}
  • 文字列展開でURL作成
  • view_nameでURL作成
  • SVGDataURISchemeで展開
  • SVGを直接展開
<i class="fa fa-calendar" aria-hidden="true"></i>
{% render 'svg:fontawesome' 'fas' 'calendar' %}
  • Fontawesome形式のタグ
  • Fontawesome5.7系でのSVGを展開

collectstatic

./manage.py collectstatic --noinput --clear

template errormessages

{% if form.errors %}
<div id="error-messages">
    {% for field in form %}
        {% for error in field.errors %}
            <div class="alert alert-danger">
                <strong>{{ error|escape }}</strong>
            </div>
        {% endfor %}
    {% endfor %}
    {% for error in form.non_field_errors %}
        <div class="alert alert-danger">
            <strong>{{ error|escape }}</strong>
        </div>
    {% endfor %}
</div>
{% endif %}

Template loop

{% for i in i|rjust:20 %}
mock data.
{% endfor %}

バグ?仕様?

Widgetsのrendererが、settings TEMPLATESのDIRSを使用しない。
(defaultの設定を使用している模様)
src
APP_DIRS: Trueっぽいので、そちらは探索する。

Bookmark

Django + Vue

SPA関連があったのでメモ

Python Django チュートリアルまとめ

時間があったら、どんなのか試してみたい。

FormSet

ハマったのでメモ。
https://stackoverflow.com/questions/2406537/django-formsets-make-first-required/2422221#2422221

Swagger

https://django-rest-swagger.readthedocs.io/en/latest/ ライブラリが古いので、 ライブラリのテンプレートを {% load staticfiles %} -> {% load static %} に変更する必要あり

Header

https://qastack.jp/programming/3889769/how-can-i-get-all-the-request-headers-in-django

CONTENT_LENGTHandを除いて、リクエスト内のCONTENT_TYPEすべてのHTTPヘッダーは、METAすべての文字を大文字に変換し、ハイフンをアンダースコアに置き換え、名前にプレフィックスを追加することHTTP_によってキーに変換されます。

論理削除

http://toruuetani.hatenablog.com/entry/20071209/p1

Async

https://qiita.com/sand/items/96cc70b6fe6bb6472476

Debug

django-debug-toolbar