2013-05-16 150 views
1

我需要加密從模板傳遞的ID在Django中查看。 其實,user_id必須在url中進行加密,所以沒有人可以得到這個代碼在url 中傳遞的id。如何加密傳遞在Django模板中的URL參數

<tr>  
{% with user_id=item.user_id %} 
#user_id have to be encrypted         
<td><center><a href="{% url "accounts" user_id %}">{{ item.Company_name }}</a></center></td> 
{% endwith %} 

我一直在尋找一段時間,但我沒有找到如何加密模板中的參數。

+0

我想你應該考慮在用戶模型中使用slugfield。 – dusual

+0

真的需要加密嗎?如果您在視圖中進行了適當的檢查,那麼人們嘗試使用其他人的ID並不重要,檢查會阻止他們訪問該頁面。 – Ngenator

+0

那麼大多數主要的網絡平臺都不會試圖隱藏userid的真正無關緊要的信息,如果您的權限已被很好地定義/實施 – dusual

回答

0

那麼,我不,如果encrypt正是你的意思。我的意思是,使用say,md5加密字符串將無法在服務器端爲您解密字符串。爲此,您應該使用encode,如使用base64編碼系統。這將用編碼字符串替換id,但有人savvy可能會注意到這一點,並解碼你的網址中的字符串。

你在這裏試圖完成的是通過默默無聞的安全這是不推薦的。你可以應用這種技術,但是你會更好地在代碼中添加更多的安全性,比如權限和類似的東西。

對於編碼您的用戶名,你可以將這個方法添加到您的Item類:

class Item 

    ... 

    def encoded_id(self): 
     import base64 
     return base64.b64encode(str(self.user_id)) 

    def decode_id(self, id): 
     import base64 
     return base64.b64decode(id) 

    ... 

這樣,你可以在你的意見做到這一點:

<tr>  
{% with user_id=item.encoded_id %} 
#user_id have to be encrypted         
<td><center><a href="{% url "accounts" user_id %}">{{ item.Company_name }}</a></center></td> 
{% endwith %} 

,你將有你的網址與在base64中編碼的id

以前請注意我的警告。 你不應該僅僅依靠這個,這是一個有效的做法,但請記住,編碼可以顛倒。

希望這有助於!

1

我認爲保羅是混淆加密與簽名。查看Pycrypto的加密功能。