gpt4 book ai didi

django - 编写 django-piston 客户端的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-04 05:01:00 27 4
gpt4 key购买 nike

我已经阅读了很多关于 django-piston 并使用 to 为我正在开发的应用程序制作 API 的内容,但我被世界的客户端挂断了。我已经编写了处理程序和 uri 映射,并且可以将 JSON 或 XML 返回到我心中的内容。我被卡住的地方是现在该怎么办。

我理想的结局是让 iPhone 和 Android 客户端使用并返回数据,但我不知道处理身份验证的正确方法。我能想到的最简单的方法是将用户名和密码保存在设备上并用它标记每个请求,最终使用基本身份验证,但这会出错。我已经查看了活塞对 OAuth 的支持,并在 this tutorial 的帮助下使其工作。 ,但这也不是正确的答案。最终,我真的很想在设备上有一个简单的用户名和密码提示,这些将通过 Piston 和 REST 发送到 Django,然后返回一个 API key 。设备将存储该 key 并用它标记所有后续请求。这感觉是正确的方法,但我不知道该怎么做。任何人都可以指出我正确的方向吗?

最佳答案

您可以编写自己的身份验证模块。这是一个例子:

class ApiKeyAuthentication(object):

def is_authenticated(self, request):
auth_string = request.META.get("HTTP_AUTHORIZATION")

if not auth_string:
return False

key = get_object_or_None(ApiKey, key=auth_string)

if not key:
request.user = AnonymousUser()
return False

request.user = key.user

return True

def challenge(self):
resp = HttpResponse("Authorization Required")
resp['WWW-Authenticate'] = "Key Based Authentication"
resp.status_code = 401
return resp

您需要一个模型来存储 API key 到用户的映射:
class ApiKey(models.Model):
user = models.ForeignKey(User, related_name='keys')
key = models.CharField(max_length=KEY_SIZE)

您需要一些方法来生成实际的 key 。这样的事情会起作用(例如,在 ApiKey 模型的 save 方法中:
key = User.objects.make_random_password(length=KEY_SIZE)

while ApiKey.objects.filter(key__exact=key).count():
key = User.objects.make_random_password(length=KEY_SIZE)

最后,连接新的身份验证后端:
# urls.py

key_auth = ApiKeyAuthentication()

def ProtectedResource(handler):
return resource.Resource(handler=handler, authentication=key_auth)

your_handler = ProtectedResource(YourHandler)

至于将用户名/密码交换为 API key ,只需编写一个使用 BasicAuthentication 的处理程序来创建并返回新的 ApiKey(用于 request.user)。

关于django - 编写 django-piston 客户端的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4457876/

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