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))
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とか
なんかー
- css-html-js-minify 使用してみたら、ぶっ壊れたorz..
<?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作成SVG
をDataURIScheme
で展開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関連があったのでメモ
時間があったら、どんなのか試してみたい。
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