python - 如何将不同的输入传递给类函数
问题描述
我在 Django 休息框架中有两个不同的类,它们做完全相同的事情但使用不同的数据。只能在特定函数内访问该数据变量。目前我已经明确编写了两个单独的类。我怎样才能将它合并到一个类中并通过传递一个单独的参数来继承它。
from rest_framework import permissions
class CreateOrUpdateInSameSchool1(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in ('POST', 'PUT','PATCH'):
return self.request.user.school.id == obj.xyz.school.id # Different !!
else:
return True
class CreateOrUpdateInSameSchool2(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in ('POST', 'PUT','PATCH'):
return self.request.user.school.id == obj.mno.school.id # Different !!
else:
return True
obj
变量仅在函数内部可用has_object_permission
解决方案
你想做这样的事情吗?我知道它很丑,但可能会改进:
from rest_framework import permissions
class CreateOrUpdateInSameSchool(permissions.BasePermission):
def __init__(self, school_id_type):
self.school_id_type = school_id_type
def has_object_permission(self, request, view, obj):
if request.method in ('POST', 'PUT','PATCH'):
if self.school_id_type == "xyz":
return self.request.user.school.id == obj.xyz.school.id # Different !!
elif self.school_id_type == "mno":
return self.request.user.school.id == obj.mno.school.id # Different !!
else:
return None
else:
return True
或者您可以使用operator.attrgetter()
:
from rest_framework import permissions
from operator import attrgetter
class CreateOrUpdateInSameSchool(permissions.BasePermission):
def __init__(self, school_id_type: str):
self.school_id_type = school_id_type
def has_object_permission(self, request, view, obj):
s_id_type = attrgetter(self.school_id_type, 'school', 'id')(obj)
if request.method in ('POST', 'PUT','PATCH'):
return self.request.user.school.id == s_id_type # Different !!
else:
return True
两种方式,当你像这样调用类时,你需要指定你想要什么样的返回对象:
foo = CreateOrUpdateInSameSchool(school_id_type='xyz')
# or
bar = CreateOrUpdateInSameSchool(school_id_type='mno')
推荐阅读
- javascript - Javascript:通过其类名和类型同时获取输入
- python - Python:无法导入模块
- xml - 解析符合给定标准的一个孩子的 XML 和打印属性
- excel - VBA:具有两个工作簿的匹配功能
- webpack - 如何填写 Parcel Bundler?
- php - php 格式字段 datetime-local 到 php
- hql - 在 hibernate-5 中运行命名查询时,我将如何确保它使用 JPA2.1 标准
- ios - 如何在 UITableViewCell 中创建表格视图?具有可扩展功能
- python - 三个问题答错后如何结束测验
- javascript - 打字稿中的Json形成(Angular 7)