bpcommons ドキュメント¶
bpcommonsとは?¶
bpcommonsはDjango用のプロジェクト共有ライブラリです。
目次:
Ajax/JSONの処理¶
ブラウザのJavascriptから、AJAXデータ通信をよくしますが、 面倒な部分はいっぱいあります。標準Djangoでは、HttpResponseで mimetypeを指定した上、返すデータをJSONに直列化することも必要です。
from django.contrib.auth.models import User
from django.utils import simplejson
def myajax_view(request):
user = User.object.get(pk=request.GET["id"])
return HttpResponse(simplejson.dumps({
"username": user.username,
"fullname": user.get_full_name(),
}), mimetype="text/javascript")
上のやり方にしても、decimal.Decimal, datetime.datetime, DjangoのLazyObjectなどを 直列化することができません。
bpcommonsはAJAXをもっと簡単にできるようにいろなツールが揃えています。
commons.views.decorators
は ajax_view
デコレーターを定義しています。
-
ajax_request
()¶ ajax_request をビュー関数につけると、ビューから返したデータをそのまま、 JSONに書き換える:
from django.contrib.auth.models import User from commons.views.decorators import ajax_request @ajax_request def myajax_view(request): user = User.object.get(pk=request.GET["id"]) return { "username": user.username, "fullname": user.get_full_name(), }
HttpResponse オブジェクトを返すこともできます。 HttpResponseを返した場合、 response をajax_requestはJSONに変換せずにそのまま返す:
from django.contrib.auth.models import User from commons.views.decorators import ajax_request @ajax_request def myajax_view(request): user = User.object.get(pk=request.GET["id"]) if user != request.user: return HttpResponseBadRequest(u"不正なリクエスト") return { "username": user.username, "fullname": user.get_full_name(), }
commons.forms.decorators
-- フォームデコレーター¶
-
commons.forms.decorators.
autostrip
()¶ 検証する前に、CharFieldのデータをstripするクラスデコレーター:
class PersonForm(forms.Form): name = forms.CharField(min_length=2, max_length=10) email = forms.EmailField() PersonForm = autostrip(PersonForm)
commons.forms.fields
-- フォームフィールド¶
-
class
commons.forms.fields.
StripRegexField
¶ 検証する前に、strip()をかけるフィールド。さらに、正規表現を指定した 正規表現にマッチするかを検証します:
from django import forms from commons.forms import StripRegexField class MyForm(forms.Form): name = StripRegexField('^Monty', label=u'名前', error_message=u'名前はMontyから始まらないといけません。')
-
class
commons.forms.fields.
EmailField
¶ Djangoは標準に電子メールアドレスのフォームフィールドクラスを用意してありますが、 メールアドレスのフォーマットに厳しい。特に、日本の携帯メールアドレスが標準 Django の EmailField の検証に通らない。というわけで、commons.forms.fields で EmailField が実装されています。
使い方は Django の EmailField と一緒です:
from django import forms from commons.forms import EmailField class MyForm(forms.Form): email = EmailField(label=u"メールアドレス")
-
class
commons.forms.fields.
AlphaNumField
¶ 半角英数字と"_","-"のみ許容するフィールド:
from django import forms from commons.forms import AlphaNumField class MyForm(forms.Form): username = AlphaNumField(label=u'ユーザ名')
-
class
commons.forms.fields.
NumCharField
¶ NumCharField は数字のみを許容するフィールド:
from django import forms from commons.forms import NumCharField class MyForm(forms.Form): voucher_id = NumCharField(label=u'伝票ID')
-
class
commons.forms.fields.
FullWidthCharField
¶ 全角文字のみを許容するフィールド:
from django import forms from commons.forms import FullWidthCharField class MyForm(forms.Form): name = FullWidthCharField(label=u'名前')
注釈
現在の実装ですと、utf-8のみに対応しています。
-
class
commons.forms.fields.
HiraganaCharField
¶ 全角ひらがなのみを許容するフィールド:
from django import forms from commons.forms import HiraganaCharField class MyForm(forms.Form): name = HiraganaCharField(label=u'名前')
注釈
現在の実装ですと、utf-8のみに対応しています。
-
class
commons.forms.fields.
JSONField
¶ バージョン 0.37 で非推奨: 削除されました。 https://pypi.python.org/pypi/jsonfield を使用して下さい。
commons.forms.utils
-- フォームユティリティ¶
-
class
commons.forms.utils.
Choices
¶ ChoicesはDjangoのforms.ChoiceFieldに使える便利なクラス。普段には ChoiceFieldのchoicesパラメータとして、2-tupleを使いますが、実は イテレータオブジェクトも使えます。Choicesは整数とverboseと文字列名前 をマッピングしてくれて、便利な操作ができます。:
>>> from commons.forms import Choices >>> STATUSES = Choices( ... (1, 'live', 'Live'), ... (2, 'draft', 'Draft'), ... (3, 'hidden', 'Not Live'), ... ) # choicesリストとして使えます: >>> list(STATUSES) [(1, 'Live'), (2, 'Draft')] # 整数コードから、ラベルに簡単に変換: >>> STATUSES.verbose(1) 'Live' # 文字列名前にマッピング >>> STATUS.prop(1) 'live' # ... と逆に: >>> STATUSES.code("draft") 2 # モデルフィールドにchoicesとして使えます status = models.SmallIntegerField(choices=STATUSES, ... default=STATUSES["live"])
commons.http
-- HTTP ユティリティ¶
-
class
commons.http.
JSONResponse
¶ バージョン 0.37 で非推奨: 次のバージョンで削除されます。 django.http.JsonResponse を使用して下さい。
マネージメントコマンド¶
rmcache [cache key]¶
指定されたキャッシュキーを削除する。古いデータをキャッシュから削除する場合、 特に、デプロイする時に使うことを予想します:
python manage.py rmcache mycachekey
commons.middleware.debug
-- デバグ ミドルウエア¶
-
class
commons.middleware.debug.
DebugMiddleware
¶ SQLクエリをstdoutに出力するミドルウエア。
settings.DEBUG
は True である場合のみに、 クエリを出力します。
ChangeLog¶
Release 0.40 (2020-04-28)¶
- Fix: Field.rel and Field.remote_field.to are removed in Django 2.0
Release 0.39 (2019-09-17)¶
Supports:
- Python-3.6, 3.7 (+ 3.7 / - 2.7)
- Django-1.11, 2.2 (+ 2.2 / - 1.8, 1.10 that doesn't support py36)
- Drop dependency: zenhan
Release 0.38 (2017-07-11)¶
- Support Python-3.6
- Support Django-1.11
- Drop Django-1.9
- Remove dependency to bputils
Release 0.37 (2016-11-25)¶
- Support Django-1.10
- Drop Python-2.6
- Drop Django-1.7 or earlier.
- Deprecate some classes:
- beproud.django.commons.http.JsonResponse
- beproud.django.commons.utils.javascript.DjangoJSONEncoder
- Drop some classes:
- beproud.django.commons.models.fields.JSONField
- beproud.django.commons.models.fields.PickledObjectField
- beproud.django.commons.forms.JSONField
- beproud.django.commons.forms.widgets.JSONWidget
- beproud.django.commons.forms.widgets.AdminJSONWidget
- Drop
switch
templatetag. - Remove 'BigIntegerField' from __all__ of beproud.django.commons.models.fields. Please use django.db.models.BigIntegerField instead.
Please use https://pypi.python.org/pypi/jsonfield instead of our JSONField.
Release 0.36 (2016-03-23)¶
- some fixes and improvements
Release 0.35 (2016-01-15)¶
- Support Django-1.9
- some fixes and improvements