Python django url反向隐藏关键字参数
考虑来自此url的请求Python django url反向隐藏关键字参数,python,django,django-views,Python,Django,Django Views,考虑来自此url的请求/messages/compose/(?p[\+\.\w]+)/,其中收件人是由+符号分隔的用户名。成功(向收件人成功发送邮件)后,我将执行以下操作: #success_url = 'message_send_success' recipients = '+'.join([obj.username for obj in recipients]) #converting them back to original string reverse(success_url, kwa
/messages/compose/(?p[\+\.\w]+)/
,其中收件人是由+
符号分隔的用户名。成功(向收件人成功发送邮件)后,我将执行以下操作:
#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(r'^/messages/success/(?P[\+\.\w]+)$,'site.views.message\u send\u success',name='message\u send\u success')
但它会显示url中的所有收件人,是否有其他方法可以隐藏这些收件人字符串以显示在url中,并可以在请求中访问这些收件人???也许您想使用base64库:
>>> base64.b64encode("what is that?")
'd2hhdCBpcyB0aGF0Pw=='
>>> base64.b64decode("d2hhdCBpcyB0aGF0Pw==")
'what is that?'
注意:如果您想拥有更多安全URL,您应该对该字符串进行一些翻译(否则其他知道base(en)编码的用户将很容易解码您的值。也许您想使用base64库:
>>> base64.b64encode("what is that?")
'd2hhdCBpcyB0aGF0Pw=='
>>> base64.b64decode("d2hhdCBpcyB0aGF0Pw==")
'what is that?'
注意:如果您想拥有更多安全URL,您应该对该字符串进行一些翻译(否则其他知道基本(en)编码的用户将很容易解码您的值。如果您使用重定向,则不会。Django有一个,这意味着服务器上在一个请求和下一个无用户状态之间保持不变。因此,Django无法(自动)“记住”重定向之前的收件人,以便它可以在下一个HTTP请求中访问他们
您想要隐藏这些信息的原因是什么?是否存在无法发送回客户端的敏感信息或类似信息?避免这种情况的一种方法是简单地重复客户端发送的信息(即原始的
收件人
参数)并让success
视图重做compose
对其执行的操作。如果使用重定向,则不会重做。Django有一个,这意味着服务器上在一个请求和下一个无用户状态之间会持续存在。因此,Django无法(自动)“记住”您的收件人在重定向之前是什么,因此它可以在下一个HTTP请求中访问他们
您想要隐藏这些信息的原因是什么?是否存在无法发送回客户端的敏感信息或类似信息?避免这种情况的一种方法是简单地重复客户端发送的信息(即原始的
收件人
参数)并让success
视图重做compose
对它们所做的操作。一个原因是url中看起来很混乱,如果用户同时向20个用户发送消息,那么所有20个用户名都将显示在url中。而且url中的用户名公开,这也是不安全的。在这种情况下,您不应该将它们发送到客户端,编码与否。我已经说过的一个选项是重复原始的recipients
参数,另一个选项是使用临时表来存储compose
的结果。我认为前者更好,在这种情况下,简化url不值得在服务器中存储状态。但这取决于您的决定。一个是eason是因为它在url中看起来很混乱,如果用户同时向20个用户发送消息,那么所有20个用户名都将显示在url中。而且由于url中的用户名公开,因此也不安全。在这种情况下,您不应该将其发送给客户机,不管是否已编码。我已经说过一个选项,重复原始的recipients
参数,另一个选项是我们将使用一个临时表来存储compose
的结果。我认为前者更好,在这种情况下,简化url不值得在服务器上花费额外的精力来存储状态。但这取决于您的决定。