Django: 文字列からクラスをImportする


Django 文字列からクラスをImportする。

サンプルのRepositoryはこちらです。
RepositoryはAPPごとのSettingと兼ねているのでご了承ください。

Djangoで文字列からクラスをImportしたいときありますよねー。
そういう時は、django.utils.module_loadingのimport_stringを使います。

from django.utils.module_loading import import_string

cl = import_string('rest_framework.permissions.IsAdminUser')

使い道

自分はPermissionを文字列の配列でsettings.pyに設定し、RestFrameWorkのViewsetで使いたかったときに使用しました。

project/settings.py
SAMPLE_PERMISSIONS = [
    'rest_framework.permissions.IsAuthenticated',
    'sample_app.permissions.SamplePermission'
]
sample_app/views.py
from django.conf import settings
from rest_framework.viewsets import ModelViewSet
from django.utils.module_loading import import_string

from .serializers import SampleSerializer
from .models import Sample


class SampleViewSet(ModelViewSet):
    serializer_class = SampleSerializer
    queryset = Sample.objects.all()

    # ここで使用した。
    # IsAuthenticated, SamplePermissionがPermissionsに適用される。
    permission_classes = [
        import_string(permission_class) for permission_class in settings.SAMPLE_PERMISSIONS]

こんな風に利用できます。
使う時がたまにあると思うので参考に、

サンプルのRepositoryはこちらです。
RepositoryはAPPごとのSettingと兼ねているのでご了承ください。

ではでは、よいDjangoライフを。