DjangoとDjango rest frameworkを使用してAPIキーを作成したいと思っています。
APIキーをヘッダー情報として渡すと、そのAPIキーに紐づいたデータを返したいです。
Djangoも初心者で、またAPIについても開発経験はなく全くの初心者で、どのように書けばいいのかわからない状態になってしまいました。
myApiというプロジェクトの下にapisiteというアプリを作ってみています。
views.py
1 2class DataViewSet(viewsets.ModelViewSet): 3 queryset = Data.objects.filter() 4 serializer_class = DataSerializer 5 permission_classes = (HasAPIAccess,) 6 7 def get(self, request, format=None): 8 content = { 9 'Status': 'Invalid API Key' 10 } 11 return Response(content)
authentications.py
1class HasAPIAccess(permissions.BasePermission): 2 message = 'Invalid API Key.' 3 4 def has_permission(self, request, view): 5 api_key = request.META.get('HTTP_API_KEY', '') 6 return APIKey.objects.filter(api_key=api_key).exists()
上記のようにviewとauthentications.pyファイルを作成しています。
取得したいデータには作成したAPIキーが合わせて保存してある形になっています。
curl http://localhost:8000/api/datas/と打つと、
{"detail":"Authentication credentials were not provided."}
と表示され、-H 'Api-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'と続けて打つと、登録してあるデータすべてがjsonとして返ってきます。
-Hで指定したAPIキーを持つデータ以外のデータも返って来てしまうのですが、どこでどのような指定をすれば渡したAPIキーを持つデータだけ返すことができるのでしょうか?
ご教示いただけますと幸いです。よろしくお願いいたします。
あなたの回答
tips
プレビュー