django - 是否可以检查函数是否具有来自 DRF 和 Django 中的类属性的装饰器?
问题描述
我目前正在考虑如何使用 DRF 在我的 Django 应用程序中实现权限。我的想法是有几个通用类继承BasePermission
并在视图中定义这些类,例如:
class ExampleView(ModelViewSet):
permission_classes = (ExamplePermissionClass,)
但是,这对于我拥有的某些视图可能不够,即我可能会在整个视图上声明一个通用类,但我可能还希望一个@action
使用不同的权限。为此,我想制作装饰器权限,它会根据每个方法检查权限。但是,我确实认为这permission_classes
是先执行的,这是行不通的。有办法解决这个问题吗?
例子:
class ExampleView(ModelViewSet):
permission_classes = (ExamplePermissionClass,)
@permissions(PermissionName etc...)
@action(...)
def example_action
我怎样才能绕过权限类,只在这里检查装饰器?
解决方案
您可以使用get_permissions
方法为不同的操作配置不同的权限:
def get_permissions(self):
if self.action == "example_action":
return (ExamplePermissionClass1, ExamplePermissionClass2)
else:
return self.permission_classes # Default value
查看文档的此部分以获取更多信息。
推荐阅读
- backbone.js - Backbone.js 日期输入 - 设置日期选择器默认年份标签
- outlook-addin - 调试 Outlook 加载项桌面
- javascript - Sharepoint 编辑按钮,允许用户从 web 部件的列表中编辑数据
- powerbi - YTD 按类别过滤 - DAX / Power BI
- excel - 我可以在 countif excel 函数中使用数组的元素吗?
- node.js - 无法使用 axios 在 nodejs 中通过 id 获取用户
- c++ - 如何提高计算浮点数的精度?
- rubygems - 如何修复无效的 gemspec
- android - setText 的解决方法是什么
- typescript - 由于导入解析错误,Expo 构建失败