2012-05-28 17 views
1

請考慮來自此url的請求/messages/compose/(?P<recipients>[\+\.\w]+)/其中收件人是由+符號分隔的用戶名。成功(郵件成功發送收件人)後,我在做什麼:django url反向隱藏關鍵字參數

#success_url = 'message_send_success' 
recipients = '+'.join([obj.username for obj in recipients]) #converting them back to original string 
reverse(success_url, kwargs={'recipients': recipients}) 

這是URL向誰匹配:

url(r'^/messages/success/(?P<recipients>[\+\.\w]+)$', 'site.views.message_send_success', name='message_send_success') 

但它會在網址中顯示所有收件人,有沒有走我可以隱藏這些收件人字符串在url中顯示,並可以在請求中訪問它?

回答

0

如果你使用的是重定向,則不需要。Django有"shared-nothing" architecture,這意味着在一個請求和下一個沒有用戶狀態之間,服務器上仍然存在,因此,Django不能)「記住」你的收件人在重定向之前是什麼,所以它可以在下一個HTTP請求中訪問它們。

你想隱藏他們的原因是什麼?是否有敏感信息,你不能發回給客戶,或類似的東西?避免這種情況的一個選擇是簡單地重複客戶端發送的信息(即,原始的recipients參數)並使對它們執行的操作重做success

+0

其中一個原因是它看起來很亂,如果用戶同時向20個用戶發送消息,那麼所有20個用戶名將在url中顯示。而且它也是不安全的,因爲url中的用戶名被公開。 –

+0

在這種情況下,您不應該將它們發送到客戶端,不是編碼的。我已經說過一個選項,重複原來的'recipients'參數,另一個選項是使用臨時表來存儲'compose'的結果。恕我直言,前者是更好的,我不認爲簡化網址是值得額外的努力,在這種情況下,在服務器中存儲狀態。但是由你來決定。 – mgibsonbr

1

也許你要使用的base64庫:

>>> base64.b64encode("what is that?") 
'd2hhdCBpcyB0aGF0Pw==' 
>>> base64.b64decode("d2hhdCBpcyB0aGF0Pw==") 
'what is that?' 

注意:如果你想有更多的安全網址,你應該做一些翻譯上的字符串,知道基地(帶編碼的意志(否則其他用戶)很容易解碼你的價值

相關問題