2016-05-27 14 views
0

Ich möchte eine kleine Django-App schreiben, die alle internen URLs des Projekts verkürzen wird. Bis jetzt habe ich short_url, was ziemlich genau das ist, was wir wollen. Außer es akzeptiert nur einen int. Jetzt gibt es noch ein paar andere Parameter, die wir in der URL kodieren müssen. Ich muss wissen, wie das gemacht werden kann.URL-Kürzung in Django

Zunächst wir von Hash basierte Implementierung, aber wir müssten das in unseren Datenbanken speichern, so dass das nicht gut ist.

Verschlüsseln Daten mit Schlüssel war auch eine Option, aber die Ausgabe ist zu kurz für kurze URL.

Kann jemand eine Bibliothek oder einen Algorithmus vorschlagen, die für dasselbe verwendet werden können. Im Gegensatz zu short_url haben wir auch ASCII-Daten. Und so weit wie möglich würden wir die Anwendung wie staatenlos zu sein (keine Speicherung in DB) oder wenn inevetable at-dest nicht überprüft DB jedes Mal, wenn die URL erzeugt worden ist (niedrig/keine Kollision)

EDIT

Für ein Beispiel haben wir derzeit URL-Format als/Projekt/Anwendung. Anwendung ist eine Liste, die dem Projekt zugeordnet ist. Was wir jetzt brauchen, ist eine bijektive Funktion, die Projekt + Anwendung aufnimmt und kurze URLs ausgibt. (/ Gjd73 zum Beispiel). Der Projektname wird von Out-Usern definiert und der Anwendungsname ist in unserer Datenbank vordefiniert.

es kann eine beliebige Anzahl von Projekten und Anwendungen geben, beide sind ascii, aber weil dort pk-Wert auch verwendet werden kann, falls es nützlicher ist als der ASCII-Name.

+0

Sie müssen die Zustandsinformationen irgendwo speichern. Angenommen, Sie möchten, dass diese Informationen über Server-Neustarts und/oder mehrere Instanzen des Servers hinweg bestehen bleiben, ist eine DB Ihre einzige Option. Hinweis: Zwischenspeichern der Informationen ist möglich, kann jedoch zu Problemen führen. –

+0

@PeterRowell einen Blick auf den lib-Link, den ich hinzugefügt habe, die nicht in db speichert, seine Art von One-One-Funktion. Zur gleichen Zeit habe ich erwähnt, dass ich kein Problem habe, in DB zu speichern, es sei denn, ich brauche keine Abfrage zu machen, um zu überprüfen, ob die URL jedes Mal existiert, wenn ich eine neue erzeuge. :) – georoot

+0

Können Sie einige Beispiel-URLs anzeigen? –

Antwort

1

Wenn in Ihrer Datenbank jede "Anwendung" ForeignKey-bezogen auf ein übergeordnetes "Projekt" ist, können Sie den "Projekt" -Namen/ID aus Ihrem URL-Pfad löschen. Ein Pfad wie exmple.com/12345 (wo "12345" ist Ihre Anwendung pk) ist etwa so kurz wie es nur geht.

Sie können es sogar kürzer machen und Base64 encode diese Zahl, so erhalten Sie einen noch kürzeren alphanum Wert.