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ライフを。