考慮する必要がある2つのことがあります。認証と承認。
まず、リクエストメソッドがGETの場合、APIキーに関係なくすべてのユーザーを認証する必要があります。他のすべてのメソッドでは、ApiKeyAuthenticationを使用します。
これで、認証されたすべてのユーザーが承認の対象になります。ここでは、GETリクエストが常に許可されていることも確認する必要があります。このような何かがあなたを始めるはずです:
from tastypie.resources import ModelResource
from tastypie.authentication import ApiKeyAuthentication
from tastypie.authorization import DjangoAuthorization
class MyAuthentication(ApiKeyAuthentication):
"""
Authenticates everyone if the request is GET otherwise performs
ApiKeyAuthentication.
"""
def is_authenticated(self, request, **kwargs):
if request.method == 'GET':
return True
return super(MyAuthentication, self).is_authenticated(request, **kwargs)
class MyAuthorization(DjangoAuthorization)
"""
Authorizes every authenticated user to perform GET, for all others
performs DjangoAuthorization.
"""
def is_authorized(self, request, object=None):
if request.method == 'GET':
return True
else:
return super(MyAuthorization, self).is_authorized(request, object)
class MyResource(ModelResource):
class Meta:
authentication = MyAuthentication()
authorization = MyAuthorization()
つまり、基本的には、GETリクエストを使用するためのアプローチでApiKeyAuthentication
あり、特別な処理が欠けているだけです。DjangoAuthorization