Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django url反向隐藏关键字参数_Python_Django_Django Views - Fatal编程技术网

Python django 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

考虑来自此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, 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不值得在服务器上花费额外的精力来存储状态。但这取决于您的决定。