10

私がやろうとしているのは、ユーザーが API キーを要求するたびに (ユーザーが既に API キーを生成しているかどうかに関係なく)、システムがまったく新しいキーを生成することです。

呼び出すたびApiKey.objects.create()に、生成されていないユーザーの API キーが生成されることを私は知っています。ただし、ユーザー持っている場合、メソッドを呼び出そうとすると.create()エラーがスローされます。

この場合、独自の鍵ジェネレーターを作成するのが最善であると考えました。しかし、ここにいる誰かが、ランダムな API キーを生成できるヘルパー関数を知っていて、自分で手動でデータベースに保存できるようになることを期待しています。

そのようなヘルパー関数を知っている人はいますか?

4

5 に答える 5

6

私はそれを考え出した。

まず、ユーザーの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)
于 2012-06-07T23:27:27.450 に答える
5

はい、キーを生成するためのコードは、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()

アップデート:

したがって、最短バージョンは次のとおりです。

return ApiKey.objects.get_or_create(user=someuser)[0].key

これにより、新しいキーが生成されるか、既存のキーが返されます。

于 2012-06-07T23:38:07.553 に答える