Wie generieren Sie temporäre URLs in Django
Frage mich, ob es eine gute Möglichkeit zum generieren von temporären URLs, läuft in X Tagen ab. Würde gerne per E-Mail aus einer URL, auf die der Empfänger klicken kann, um Zugriff auf einen Teil der Website, dann ist nicht zugänglich über die URL nach einiger Zeit. Keine Ahnung, wie dies zu tun, mit Django, oder Python, oder sonst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht erwarten, um eine große response-rate, dann sollten Sie versuchen, speichern Sie alle Daten in der URL selbst. Auf diese Weise müssen Sie nicht für etwas zu speichern in der Datenbank und Daten-Speicher proportional zu den Antworten eher als die E-Mails gesendet.
Aktualisiert: Lassen Sie uns sagen, Sie hatte zwei Saiten, die einzigartig für jeden Benutzer. Sie packen und entpacken Sie Sie mit einem Schutz-hash wie dieser:
Diese produziert:
In Ihre E-Mails eine URL enthalten, die sowohl die hash-und enc-Werte (korrekt url-zitiert). In Ihrer view-Funktion, verwenden Sie diese beiden Werte mit decode_data zum abrufen der ursprünglichen Daten.
Die zlib.komprimieren kann nicht sein, dass hilfreiche, je nach Ihren Daten, Sie können Experimentieren, um zu sehen, was funktioniert am besten für Sie.
Modelle
Ansichten
urls
//natürlich müssen Sie einige Importe und Vorlagen
Konnten Sie dies mit URLs wie:
Ihre URLconf würde wie folgt Aussehen:
...wo tempurl ist ein view-handler holt die entsprechende Seite basiert auf der hash. Oder sendet einen 404, wenn die Seite abgelaufen ist.
Es hängt davon ab, was Sie tun möchten - one-shot Dinge wie account-Aktivierung oder die Möglichkeit eine Datei heruntergeladen werden könnte getan werden, mit einer Ansicht, die sieht ein hash, prüft den Zeitstempel und führt eine Aktion aus oder stellt eine Datei.
Mehr komplexe Dinge wie die Bereitstellung beliebiger Daten würde auch erfordern, dass das Modell mit Bezug auf die Daten, so dass Sie entscheiden können, was zurück zu senden. Schließlich ermöglicht den Zugang zu mehreren Seiten wäre wahrscheinlich beinhalten die Einstellung etwas in die Sitzung des Benutzers und dann mit, dass, um zu bestimmen, was Sie sehen können, gefolgt von einer Weiterleitung.
Wenn Sie könnten, bieten mehr Details über das, was du versuchst zu tun und wie gut Sie wissen, Django, kann ich eine genauere Antwort.
Ich glaube, die Lösung liegt in einer Kombination von allen vorgeschlagenen Lösungen. Ich würde vorschlagen, mit einer auslaufenden Sitzung, damit der link verfallen innerhalb der Frist geben Sie in das Modell. Kombiniert mit einer Umleitung und middleware zu überprüfen, ob ein session-Attribut vorhanden ist und die angeforderte url erfordert es, die Sie erstellen können, etwas sicherer Teile Ihrer site, die haben schönere URLs, die auf dauerhafte Teile der Website. Ich benutze diese für den Nachweis design/features für eine begrenzte Zeit. Dies funktioniert, um zu verhindern, dass die Weiterleitung... ich Tue es nicht, aber Sie könnten entfernen Sie die temp-url nach dem ersten Klick, damit nur die session-Attribut wird Zugang bieten somit mehr effektiv begrenzt auf einen Benutzer. Ich persönlich glaube nicht daran, wenn die temp-url wird weitergeleitet zu wissen, es wird immer nur für eine gewisse Zeit. Funktioniert gut in einer modifizierten form für die Verfolgung eingeladen Besuche.
Ist es möglicherweise übertrieben, aber man könnte ein uuidfield auf Ihr Modell und set-up eine Celerybeat Aufgabe zum ändern der uuid jederzeit Intervall, das Sie wählen.
Wenn der Sellerie ist zu viel und es könnte sein, Sie könnten nur speichern die Zeit, die URL wird zuerst gesendet, verwenden Sie die timedelta-Funktion, wenn es gesendet wird, danach, und, wenn die verstrichene Zeit größer ist als das, was Sie wollen, verwenden Sie einfach eine Umleitung. Ich denke die zweite Lösung ist sehr einfach und es reichen würde einfach. Es wäre darum ein Modell mit der URL, Zeit gesandt erste, Zeit, die meisten vor kurzem an, eine Behinderte fahne, und ein Delta, dass Sie annehmbar finden, die für die URL zu Leben.