gpt4 book ai didi

django - 未调用 apply_authorization_limits

转载 作者:行者123 更新时间:2023-12-04 20:10:02 24 4
gpt4 key购买 nike

我尝试在我的 Django 应用程序中获取有关我的经过身份验证的用户的详细信息。

为此,我创建了一个新资源:

class MyUserResource(ModelResource):
class Meta:
queryset = ReaderUser.objects.all()
resource_name = 'me'
list_allowed_methods = []
detail_allowed_methods = ['get']
authorization = Authorization()
authentication = SessionAuthentication()
excludes = ('password', 'id', 'is_active', 'is_admin', 'last_login')

def apply_authorization_limits(self, request, object_list):
print request.user
return object_list.filter(pk=request.user.pk)

def prepend_urls(self):
return [
url(r"^(?P<resource_name>%s)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"),
]

当我使用 /api/me/?format=json 调用我的 API 时
我得到以下信息: More than one resource is found at this URI.
我也试过没有 prepend_urls。
我不明白的是 print语句永远不会在方法 apply_authorization_limits 中执行

关于我做错了什么的任何提示?

最佳答案

我找到了两种方法来解决我的问题:

第一个是两个创建我自己的授权。

就我而言,以下内容:

from tastypie.authorization import Authorization

class SimpleReaderAuthorization(Authorization):
def read_list(self, object_list, bundle):
return object_list.filter(email=bundle.request.user.email)

我只需要更新我的资源:
class MyUserResource(ModelResource):
class Meta:
queryset = ReaderUser.objects.all()
resource_name = 'me'
list_allowed_methods = ['get']
authorization = SimpleReaderAuthorization()
authentication = SessionAuthentication()
excludes = ('password', 'id', 'is_active', 'is_admin', 'last_login')

另一种简单的方法是执行以下操作,如 documentation 中所示.
def get_object_list(self, request): 
return super(YourResource, self).get_object_list(request).filter(pk=request.user.pk)

结论:我选择了第二个,因为它更干净、更简单。

关于django - 未调用 apply_authorization_limits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18969707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com