使用tastypie作为API,我们在这里。
所以主API类是:
from tastypie.api import Api
class TheAPI(Api):
def prepend_urls(self):
return [
url(r"^(?P<api_name>%s)/reset/(?P<pk>\w+)%s$" % (self.api_name, trailing_slash()), self.wrap_view('reset'), name="api_reset"),
]
def reset(self, request, **kwargs):
#do the work
到目前为止一切顺利。 我的问题在于我想在这次通话中使用ApiAuthentication。我不希望任何人能够使用重置功能(在URL中有一个唯一的代码,但仍然)。
但由于这不是资源,我不知道该怎么做。我尝试在这个类中添加一个Meta类,但它似乎被忽略了。
我能想到的唯一另一个黑客是发明了一些封装了这个功能的FakeResource
,但这感觉很奇怪,因为它不是一个资源。
有什么想法吗?
答案 0 :(得分:0)
在此处扩展常规资源并将authorization
和authentication
添加到Meta类没有任何害处。
class BaseNonORMResource(Resource):
class Meta:
max_limit = None
"""
(Using Tastypie's DjangoAuthorization which checks the permission a user has granted to them)
and Tastypie's token based authentication approach
"""
authorization = DjangoAuthorization()
authentication = ApiKeyAuthentication()
'''
Specify allowed_methods, list_allowed_methods or detail_allowed_methods in each SubResource
e.g. allowed_methods = ['get']
'''
allowed_methods = ['get', 'post', 'delete', 'patch', 'put']
然后用它来定义你的终端
class TheAPI(BaseNonORMResource):
def prepend_urls(self):
return [
url(r"^(?P<api_name>%s)/reset/(?P<pk>\w+)%s$" % (self.api_name, trailing_slash()), self.wrap_view('reset'), name="api_reset"),
]
def reset(self, request, **kwargs):
#do the work