使用./manage.py shell
启动Django shell之后,我在应用程序中看不到任何自定义权限子类:
In [1]: from rest_framework.permissions import BasePermission
In [2]: BasePermission.__subclasses__()
Out[2]:
[rest_framework.permissions.AllowAny,
rest_framework.permissions.IsAuthenticated,
rest_framework.permissions.IsAdminUser,
rest_framework.permissions.IsAuthenticatedOrReadOnly,
rest_framework.permissions.DjangoModelPermissions]
如何获取所有权限类,包括自定义权限类?
我正在编写一个自定义管理命令以列出所有现有权限及其使用方式,因此我需要某种方式来加载整个应用程序,而不是分别导入每个文件。
答案 0 :(得分:1)
我认为这是由于您尚未导入这些子类而发生的,因此python解释器不知道存在BasePermission
的任何自定义子类。
我最初使用django-extensions
软件包中的python manage.py shell_plus
命令对自己进行了测试,该命令在启动外壳程序时会导入所有模型。然后,当我运行BasePermission.__subclasses__()
时,它列出了我所有的自定义权限。
然后我尝试python manage.py shell
,运行相同的代码,结果与您的相同。
因此,如果您在一个文件或<app_folder>/permissions.py
之类的文件模式中拥有所有权限,则应导入所有这些权限文件(以from app_folder.permissions import *
的名义),然后尝试{{ 1}}。