Tôi cố gắng lấy thông tin chi tiết về người dùng đã được xác thực của tôi trong ứng dụng Django của tôi.apply_authorization_limits không được gọi là
Cho rằng tôi đã tạo ra một tài nguyên mới:
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"),
]
Khi tôi gọi API của tôi sử dụng /api/me/?format=json
tôi đã nhận như sau: More than one resource is found at this URI.
Tôi cũng đã cố gắng mà không có sự prepend_urls. Điều tôi không hiểu là tuyên bố print
không bao giờ được thực thi theo phương pháp apply_authorization_limits
Bất kỳ gợi ý nào về những gì tôi đang làm sai?
Về giải pháp thứ hai, tôi muốn đi với: 'def get_object (tự, yêu cầu): trả về siêu (YourResource, self) .get_object (pk = request.user.pk) ' Bằng cách này, bạn nhận được 1 đối tượng thay vì danh sách (luôn chứa 1 đối tượng) và bạn tôn trọng kiến trúc REST, yêu cầu http: // blabla/me/12 trong đó 12 là người dùng hiện tại. Con là khi yêu cầu http: // blabla/me/13 (và bạn 12), nó trả về mã HTTP 404. –
@ DavidW.Thanks cho lời khuyên của bạn. Bạn nói đúng, tôi nên quay lại điều này và xem liệu giải pháp của bạn có hợp lý không. –
@DavidD. hoạt động read_list được sử dụng trong danh sách trả về của một số tài nguyên. Để lọc riêng từng itens, bạn có thể sử dụng read_detail để trả về Unauthorized thay vì 404 thành các tài nguyên không được phép. –