gpt4 book ai didi

django-rest-framework 身份验证 : require key parameter in URL?

转载 作者:行者123 更新时间:2023-12-01 10:37:00 24 4
gpt4 key购买 nike

我在 Django 1.8 中使用出色的 django-rest-framework 工作。我有一个公共(public) RESTful API。

我现在想开始要求使用此 API 的 key GET 参数,并禁止任何没有此参数的请求。我会根据要求手动为用户分配 key 。

我已经通读了 DRF Authentication documentation ,但我不确定是否有任何东西符合我的用例。我觉得这很奇怪,因为我的用例一定很常见。

基于 token 的身份验证要求用户设置 HTTP header 。我的典型 API 用户并不成熟(将下载 CSV 的 Excel 用户),所以我认为我不能要求他们这样做。

我认为 Basic-Auth 是我需要的,但我更愿意提供一个简单的基于 URL 的 key ,而不是 Django 用户名和密码(我的应用程序现在没有用户的概念)。

实现它的最佳方法是什么?

最佳答案

创建一个表,其中包含您发给某人的所有 key 。

例子:

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

接下来创建一个自定义 Permision 类,它将在将请求转发到 View 之前检查 url 中的 api key ,例如:

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

所以请求 url 必须像 http://yourdomain.com/?apikey=sgvwregwrgwg

接下来在您的 View 中添加权限类:

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

或者如果您使用的是基于函数的 View ,那么请执行以下操作:

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

关于django-rest-framework 身份验证 : require key parameter in URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33560552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com