如何获取所有Django REST Framework权限类?

时间:2019-06-23 23:56:00

标签: python django python-3.x django-rest-framework

使用./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]

如何获取所有权限类,包括自定义权限类?

我正在编写一个自定义管理命令以列出所有现有权限及其使用方式,因此我需要某种方式来加载整个应用程序,而不是分别导入每个文件。

1 个答案:

答案 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}}。