Django-Boost日本語ドキュメント
GitHub
https://github.com/ChanTsune/django-boost
django-boost: version 1.0
インストール
pip install django-boost
pipを用いてインストールするかまたは、
git clone https://github.com/ChanTsune/Django-Boost.git
python setup.py install
GitHubから直接クローンしてもインストール出来ます。
アプリケーションの追加
settings.py
INSTALLED_APPS = [
...
'django_boost',
]
利用例
カスタムユーザー
EmailUser
メールアドレスを利用したログイン
settings.py
...
AUTH_USER_MODEL = 'django_boost.EmailUser'
...
Djangoの標準ユーザーモデルを置き換えます。
ログイン時にユーザー名の代わりにメールアドレスを利用します。
AbstractEmailUser
from django.db import models
from django_boost.models import AbstractEmailUser
class CustomUser(AbstractEmailUser):
is_flozen = models.BoolField(default=False)
homepage = models.URLField()
先程のEmailUserに追加のフィールドをもたせたい場合に利用します。
ModelMixins
UUIDModelMixin
from django.db import models
from django_boost.models import UUIDModelMixin
class Stock(UUIDModelMixin):
name = models.CharField(max_length=128)
count = models.IntegerField()
このクラスを継承してモデルを定義すると自動生成されるid
フィールドのクラスをAutoField
からUUIDField
に置き換えます。
TimeStampModelMixin
from django.db import models
from django_boost.models.mixins import TimeStampModelMixin
class Stock(TimeStampModelMixin):
name = models.CharField(max_length=128)
count = models.IntegerField()
モデルにposted_at
とupdated_at
のフィールドが追加されます。
それぞれ作成日時と更新日時が自動的に保存されます。
posted_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
組み合わせて使う
from django.db import models
from django_boost.models.mixins import UUIDMixin, TimeStampMixin
class Stock(UUIDModelMixin,TimeStampModelMixin):
name = models.CharField(max_length=128)
count = models.IntegerField()
これらのミックスインは、この様に組み合わせて使うこともできます。
フィールド
ColorCodeField
from django.db import models
from django_boost.models.filed import ColorCodeField()
class Model(models.Model):
color = ColorCodeField()
#
から始まる、16進数のカラーコードを保存します。upper=True
を設定するとアルファベットが大文字に自動変換されて保存されます。
また、lower=True
を設定した場合アルファベットは小文字に自動変換されて保存されます。
両方を同時に指定することはできません。
どちらも設定しなければ、保存時に自動変換されることはありません。
デフォルトの設定はupper=False
,lower=Flase
です。
ミドルウェア
RedirectCorrectHostnameMiddleware
settings.py
MIDDLEWARE = [
'django_boost.middleware.RedirectCorrectHostnameMiddleware', # django_boost
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
...
]
...
CORRECT_HOST = 'sample.com'
全てのアクセスをCORRECT_HOST
に設定したドメインにリダイレクトします。
DEBUG = True
の時にはリダイレクトしません。
ドメインを移行する際などに便利です。
通常は、このような操作はnginxやapacheなどのサーバーソフトウェアで行うべきですが、簡単に設定を行いたいときや、herokuなどのサービスを利用する時には効果的です。
HttpStatusCodeExceptionMiddleware
settings.py
MIDDLEWARE = [
'django_boost.middleware.HttpStatusCodeExceptionMiddleware', # django_boost
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
...
]
後述する、HttpStatusCode exceptions
を扱う時に必要です。
HttpStatusCode Exceptions
Django標準のHttp404
例外と同じように使える、Httpステータスコード例外
from django.http import JsonResponse
from django_boost.http import Http400, Http415
def view(request):
if request.content_type != 'application/json':
raise Http415
return JsonResponse({"message":"ok"})
MIDDLEWARE
にHttpStatusCodeExceptionMiddleware
を設定する必要があります。
テンプレート変数
ユーザーエージェント
テンプレート内でユーザーエージェントを利用する
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django_boost.context_processors.user_agent', # django boost
],
},
},
]
ユーザーエージェントMozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36
が与えられた時に、Djangoテンプレート内で以下の変数が使えるようにします。
{'user_agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
'browser': 'Chrome',
'device': 'Other',
'is_bot': False,
'is_email_client': False,
'is_mobile': False,
'is_pc': True,
'is_tablet': False,
'is_touch_capable': False,
'os': 'Mac OS X'}
これらの情報はuser-agentsを利用しています。
モバイルとデスクトップで表示を切り替えたいときに利用できます。
Acsess Mixins
ReAuthenticationRequiredMixin
ログインから一定時間が経った際に再認証を要求するミックスイン
from django.views.generic import TemplateView
from django_boost.views.mixin import ReAuthenticationRequiredMixin
class RecentLogin(ReAuthenticationRequiredMixin,TemplateView):
template_name = "mypage.html"
auth_unnecessary = 3600
from datetime import timedelta
from django.views.generic import TemplateView
from django_boost.views.mixin import ReAuthenticationRequiredMixin
class RecentLogin(ReAuthenticationRequiredMixin,TemplateView):
template_name = "mypage.html"
auth_unnecessary = timedelta(hours=1)
auth_unnecessary
は再認証を要求するまでの期間です。
ユーザーモデルの最終ログイン時刻からの経過時間を指定します。int
、timedelta
、None
型の値を指定することができます。
None
は0
を指定するのと同じです。
logout=True
を指定すると最終ログイン時刻が指定時間を超えた際にユーザーをログアウト状態にします。logout=False
を指定した場合、指定時間を超えてもユーザーをログアウト状態にはしません。ただし、再度認証をしないとページへのアクセスはできません。
アクセスが可能な期間を限定します。start_datetime
には、アクセスが可能になる日時を、end_datetime
にはアクセスが可能である最終日時を指定します。
それぞれ、get_start_datetime
,get_end_datetime
メソッドをオーバーライドすることで、動的にアクセス可能な日時を変更できます。
exception_class
にアクセス可能な条件が満たされなかった時に送出される例外クラスを指定できます。
デフォルトは、Http404
例外です。
Redirect Control Mixins
DynamicRedirectMixin
LoginView
の様にURLのクエリ文字列next=~
にリダイレクト先のURLを指定することでリダイレクト先を動的にコントロールできる様にするミックスイン。
フォーム系のgenericViewと組み合わせて利用できます。
from django.views,generic import FormView
from django_boost.views.mixins import DynamicRedirectMixin
class MyFormView(DynamicRedirectMixin, FormView):
redirect_field_name = 'next' # default is 'next'
...
redirect_field_name
の部分を変更することでnext
部分を別の名前に変更することができます。.
form mixin
MuchedObjectGetMixin
フォームの入力内容にマッチするモデルオブジェクト又はクエリーセットを取得できる様にするミックスイン
from django import forms
from django_boost.forms.mixins import MuchedObjectGetMixin
from .models import Customer
class CustomerForm(MuchedObjectGetMixin, forms.ModelForm):
class Meta:
models = Customer
fields = ('name', )
from django.views.generic import FormView
from .forms import CustomerForm
class CustomerSearchView(FormView):
template_name = "form.html"
form_class = CustomerForm
def form_valid(self,form):
object = form.get_object() # get muched model object
object_list = form.get_list() # get muched models objects queryset
MuchedObjectMixin
はget_object
と get_list
メソッドを提供します。それぞれフォームの入力内容にマッチするmodel object
、query set
を返却します。
Template Tags
Python組み込みの関数をフィルターやタグとして、Djangoテンプレート内で利用できる様にする。isiterable
フィルターの様にPythonの組み込み関数には含まれないがDjangoテンプレートで便利なフィルターも提供されます。
boost filters
{% load boost %}
isiterable
isiterable フィルターは、対象のオブジェクトが反復可能(イテレータブル)な場合にTrueそうでない場合にはFalseを返します。
{% load boost %}
{% if object|isiterable %}
{% for i in object %}
<p>{{ i }}</p>
{% endfor %}
{% else %}
<p>{{ object }}</p>
{% endif %}
boost_url Filters
{% load boost_url %}
urlencode
フィルターにかけた文字列をURLエンコードします。
フィルターの引数に変換しない文字を指定できます。
{% load boost_url %}
{{ url | urlencode }}
{{ url | urlencode:'abc' }}
urldecode
urlencode
逆の働きをします。
{% load boost_url %}
{{ url | urldecode }}
boost_url Tags
replace_parameters
現在のページのURLクエリ文字列を引数で置き換えた新たなクエリ文字列を生成します。
{% load boost_url %}
{# case of current page's query string is `?id=2`#}
{% replace_parameters request 'id' 1 'age' 20 %}
{# The result of replacing is `?id=2&age=20` #}
ページネーションの際にパラメータを引き継がせる時に便利です。