我想要做的是每当用户请求API密钥时 - 无论用户是否已生成一个 - 系统将生成一个全新的密钥.
我知道每当调用时ApiKey.objects.create()
都会为没有生成的用户生成一个API密钥.但是,如果用户确实有一个,则尝试调用该.create()
方法会引发错误.
在这种情况下,我认为最好编写自己的密钥生成器.但是,我现在希望这里的某个人可能知道一个帮助函数,它允许我生成一个随机的API密钥,然后让我自己手动将它保存到数据库中.
有人可能知道任何这样的帮手功能吗?
我想到了.
首先,您尝试获取用户的API密钥.如果存在,则不会抛出任何错误.要重新生成,请将检索到的用户密钥的值设置为None
,然后保存密钥.
如果抛出错误,则只需创建一个新密钥.
try:
api_key = ApiKey.objects.get(user=someuser)
api_key.key = None
api_key.save()
except ApiKey.DoesNotExist:
api_key = ApiKey.objects.create(user=someuser)
Run Code Online (Sandbox Code Playgroud)
是的,生成密钥的代码被定义为ApiKey.generate_key()
可以直接使用的实例方法.
这是一个更简单的版本,它可以消除用户是否已经存在的猜测,ApiKey.generate_key()
直接使用,而不是隐式使用ApiKey.save()
,我相信这样可以更清楚地了解用户所做的事情:
api_key = ApiKey.objects.get_or_create(user=someuser)
api_key.key = api_key.generate_key()
api_key.save()
Run Code Online (Sandbox Code Playgroud)
更新:
因此,最短的版本是:
return ApiKey.objects.get_or_create(user=someuser)[0].key
Run Code Online (Sandbox Code Playgroud)
这将生成新密钥或返回现有密钥.
归档时间: |
|
查看次数: |
4035 次 |
最近记录: |