python / tastypie:非资源授权?

时间:2015-10-20 15:09:48

标签: python api tastypie

使用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,但这感觉很奇怪,因为它不是一个资源。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在此处扩展常规资源并将authorizationauthentication添加到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