Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

sakunowman
お仕事でWebアプリの開発をしています。 仕事では主にLaravelを使いますが、Pythonのほうが好きなので、家ではDjangoでアプリを作ったりしてます。 勉強しながらですが、頑張っていきますので、アドバイス等ありましたら教えてください。 みんなで成長しましょう!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away