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_atupdated_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"})

MIDDLEWAREHttpStatusCodeExceptionMiddlewareを設定する必要があります。

テンプレート変数

ユーザーエージェント

テンプレート内でユーザーエージェントを利用する

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は再認証を要求するまでの期間です。
ユーザーモデルの最終ログイン時刻からの経過時間を指定します。
inttimedeltaNone型の値を指定することができます。 None0を指定するのと同じです。

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

MuchedObjectMixinget_objectget_listメソッドを提供します。それぞれフォームの入力内容にマッチするmodel objectquery 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` #}

ページネーションの際にパラメータを引き継がせる時に便利です。