[Django]-Django-rest-framework authentication: require key parameter in URL?

6👍

Create a table which will contain all the keys that you issue to someone.

Example:

class RestApiKey(models.Model):
    api_key = models.CharField(max_length=100)

Next create a custom Permision class which will check for the api Key in the url before forwarding the request to the view like:

from rest_framework import permissions
from yourappname.models import RestApiKey

class OnlyAPIPermission(permissions.BasePermission):
    def has_permission(self, request, view):
        try:
            api_key = request.QUERY_PARAMS.get('apikey', False)
            RestApiKey.objects.get(api_key=api_key)
            return True
        except:
            return False

So the request url has to be like http://yourdomain.com/?apikey=sgvwregwrgwg

Next in your views add the permission class:

class YourViewSet(generics.ListAPIView):
    permission_classes = (OnlyAPIPermission,)

or if you are using function based views then do like:

@permission_classes((OnlyAPIPermission, ))
def example_view(request, format=None):
    . . .

Leave a comment