2016-05-27 58 views
0

我想編寫一個小型的django應用程序,它將縮短項目的所有內部URL。直到現在我得到了short_url這幾乎是我們想要的。除了它只接受一個int。現在還有一些其他參數需要在url中進行編碼。需要知道如何做到這一點。django中的URL縮短

最初我們雖然散列爲基礎的實現,但我們需要將它存儲在我們的數據庫,所以這是不好的。

使用密鑰加密數據也是一個選項,但輸出對於短url而言太長。

有人可以建議一個庫或算法,可用於相同的。與short_url不同,我們也有ascii數據。並儘可能我們希望應用程序是無狀態(在DB沒有存儲),或者如果inevetable的,至少不會檢查DB每次是否已經生成的URL(低/無碰撞)

編輯

舉個例子,目前我們的URL格式爲/ project/application .application是一個與項目關聯的列表。現在我們需要的是一個雙向函數,它接受了項目+應用程序並給出了簡短的url。 (例如/ Gjd73)。項目名稱由用戶定義,應用程序名稱是在我們的數據庫中預定義的。

可以有任何數量的項目和應用程序,它們都是ascii,但是因爲那裏的pk值也可以用在它比ascii名字更有用的情況下。

+0

你將不得不將狀態信息存儲在某處。假設您希望該信息在服務器重啓和/或服務器的多個實例間持續存在,則數據庫是唯一的選擇。注意:緩存信息是可能的,但可能會帶來它自己的問題。 –

+0

@PeterRowell看看我添加的lib鏈接,它不存儲在數據庫中,它是一種一對一的函數。同時,我確實提到過,我沒有問題存儲在數據庫中,除非我不需要進行查詢來驗證,如果每次我生成一個新的URL都存在。 :) – georoot

+0

你可以顯示一些示例URL? –

回答

1

如果在您的數據庫中,每個「應用程序」爲ForeignKey - 與父項目「相關」,則可以從您的URL路徑中刪除「項目」名稱/標識。

類似於exmple.com/12345(其中「12345」是您的應用程序pk)的路徑大小盡可能短。

你甚至可以縮短這個數字,並且Base64 encode這個數字,所以你可以得到更短的字母數值。