将参数从模板传递给视图函数而不在 URL 中公开它
Passing argument to view function from template without exposing it in URL
如何将参数从模板传递到视图函数而不出现在 URL 中?
我熟悉通过模板向视图函数传递参数的常用方法:
模板
<a href="{% url 'redirection' pk %}">Perform</a>
URL:
url(r'^redirect/(?P<pk>\d+)/$', views.redirection, name='redirection'),
查看功能:
def redirection(request, pk):
# code of function
此方法公开了 URL 中的 pk 变量。有没有其他方法可以在不在 URL?
中公开此变量的情况下执行此操作
可以用this来完成上面的任务吗?如果是,那么应该如何更改模板中的代码来执行此操作?
首先你必须编写两个函数来编码和解码值,如下所示:
import base64
from Crypto import Random
from Crypto.Cipher import AES
AKEY = 'mysixteenbytekey' # AES key must be either 16, 24, or 32 bytes long
iv = Random.new().read(AES.block_size)
def encode(message):
obj = AES.new(AKEY, AES.MODE_CFB, iv)
return base64.urlsafe_b64encode(obj.encrypt(message))
def decode(cipher):
obj2 = AES.new(AKEY, AES.MODE_CFB, iv)
return obj2.decrypt(base64.urlsafe_b64decode(cipher))
然后当你想将参数 pk 传递给模板时,像这样编码它:
return render(...{
...
'encode_pk': encode(str(pk)),
})
然后您可以将其作为 GET 查询传递。当您在模板中创建 URL 时,将 ?
添加到 url 并将您的参数添加到其中,如下所示:
<a href="{% url 'redirection' %}?pk={{ encode_pk }}">Perform</a>
在你看来你可以这样得到这个参数
def redirection(request):
pk = decode(request.GET.get("pk"))
# do anything with pk
如何将参数从模板传递到视图函数而不出现在 URL 中?
我熟悉通过模板向视图函数传递参数的常用方法:
模板
<a href="{% url 'redirection' pk %}">Perform</a>
URL:
url(r'^redirect/(?P<pk>\d+)/$', views.redirection, name='redirection'),
查看功能:
def redirection(request, pk):
# code of function
此方法公开了 URL 中的 pk 变量。有没有其他方法可以在不在 URL?
中公开此变量的情况下执行此操作可以用this来完成上面的任务吗?如果是,那么应该如何更改模板中的代码来执行此操作?
首先你必须编写两个函数来编码和解码值,如下所示:
import base64
from Crypto import Random
from Crypto.Cipher import AES
AKEY = 'mysixteenbytekey' # AES key must be either 16, 24, or 32 bytes long
iv = Random.new().read(AES.block_size)
def encode(message):
obj = AES.new(AKEY, AES.MODE_CFB, iv)
return base64.urlsafe_b64encode(obj.encrypt(message))
def decode(cipher):
obj2 = AES.new(AKEY, AES.MODE_CFB, iv)
return obj2.decrypt(base64.urlsafe_b64decode(cipher))
然后当你想将参数 pk 传递给模板时,像这样编码它:
return render(...{
...
'encode_pk': encode(str(pk)),
})
然后您可以将其作为 GET 查询传递。当您在模板中创建 URL 时,将 ?
添加到 url 并将您的参数添加到其中,如下所示:
<a href="{% url 'redirection' %}?pk={{ encode_pk }}">Perform</a>
在你看来你可以这样得到这个参数
def redirection(request):
pk = decode(request.GET.get("pk"))
# do anything with pk