Was ich versuche zu tun ist, wann immer der Benutzer einen API-Schlüssel anfordert - unabhängig davon, ob der Benutzer bereits einen generiert hat oder nicht - erzeugt das System einen völlig neuen Schlüssel.
Ich weiß, dass das Aufrufen von ApiKey.objects.create()
einen API-Schlüssel für den Benutzer generiert, für den noch kein generiert wurde. Wenn jedoch ein Benutzer einen hat, wird beim Versuch, die Methode .create()
aufzurufen, ein Fehler ausgegeben.
In diesem Fall dachte ich, dass es am besten wäre, meinen eigenen Schlüsselgenerator zu schreiben. Ich hoffe jedoch, dass jemand hier vielleicht eine Hilfsfunktion kennt, die es mir erlaubt, einen zufälligen API-Schlüssel zu generieren und ihn dann manuell in die Datenbank zu speichern.
Würde jemand eine solche Hilfsfunktion kennen?
Ich habe es herausgefunden.
Zuerst versuchen Sie, den API-Schlüssel des Benutzers zu erhalten. Wenn es existiert, wird kein Fehler ausgelöst. Um neu zu generieren, legen Sie den Wert des abgerufenen Benutzerschlüssels auf None
fest und speichern Sie dann den Schlüssel.
Wenn ein Fehler ausgelöst wurde, erstellen Sie einfach einen neuen Schlüssel.
%Vor% Ja, der Code zum Generieren des Schlüssels ist als Instanzmethode definiert ApiKey.generate_key()
, die Sie direkt verwenden können.
Hier ist eine einfachere Version, die einiges an Rätselraten darüber ausschließt, ob der Benutzer bereits existiert oder nicht und verwendet ApiKey.generate_key()
direkt und nicht implizit durch ApiKey.save()
, was es meiner Ansicht nach etwas klarer macht, was versucht wird vollendet werden:
UPDATE:
Daher ist die kürzeste Version:
%Vor%Dies erzeugt einen neuen Schlüssel oder gibt einen vorhandenen zurück.
Es ist viel zu einfach, integrierte Funktionen zu verwenden, immer. Um Api-Schlüssel in Tastypie
zu generieren, verwenden Sie " create_api_key
" von Tastypie s
ApikeyAuthentication '.
Sie müssen nur " create_api_key
" von tastypie.models
importieren
und dann rufen Sie es von django-signal
oder wie Sie benötigen.
d. h.
%Vor%Erklärt ausführlich und einfacher bei: