我的问题涉及将变量从模板传递到Django中的视图。
我知道在URL和表单中传递变量。我与第一个问题的关键是可以操纵url,这不是我想要的。反正有没有阻止它?
现在这就是我作为创可贴的方式:
<form action="/match/" method="post">
{% csrf_token %}
<input type="hidden" name="name1" value="{{ male_results }}">
<input type="hidden" name="userid1" value="{{ male_pic_userid }}">
<input type="hidden" name="name2" value="{{ female_results }}">
<input type="hidden" name="userid2" value="{{ female_pic_userid }}">
<input type="submit" value="Submit" />
</form>
有没有办法避免使用它?谢谢!
答案 0 :(得分:24)
有三种方法可以保留这类信息:
只需将您想要的数据填入request.session
字典;它会坚持每个用户,你可以轻松访问它:
# view1
request.session['name1'] = male_results
request.session['userid1'] = male_pic_userid
# view2 (or elsewhere in view1)
male_results = request.session.get('name1')
male_pic_userid = request.session.get('userid1')
POST
一样,网页内容由网址和会话数据决定 - 网址不再是唯一的,用户无法共享依赖会话信息的特定网页< / LI>
像/match/?name1=foo1&userid1&name2=bar&userid2=2
这样的东西。您可以手动添加这些内容(<a href='/match/?name1={{ male_results }}...
),也可以将POST
表单更改为GET
。
POST
数据是巨大的痛苦。答案 1 :(得分:2)
有三种方法可以将数据从html页面导入服务器后端:URL(GET),表单(POST)和Cookie。
这三者中的任何一个都可能被操纵,因此无论如何都需要在服务器上验证所有内容。
就效率而言,根据您的帖子标题,URL(GET)变量稍微提高效率,因为表单数据在发送到服务器之前会经过一定程度的编码。
在正常使用情况下,标准是在从服务器检索数据时使用URL(GET)变量,并在想要操作(编辑/删除)服务器上的数据时使用表单(POST)变量。