编写你的第一个django应用程序4

本教程上接教程3,我们将继续开发网页投票应用,本部分将主要关注简单的表单处理以及如何对代码进行优化

写一个简单的表单

让我们更新一下在上一个教程中编写的投票详细页面的模板(‘polls/detail.html’),让它包含一个HTML<form>元素

<h1>{{ question.question_text }}</h1>

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
    <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
{% endfor %}
<input type="submit" value="Vote" />
</form>

简要说明:

在detail网页模板中,我们为Question对应的每个Choice都添加了一个单选按钮用于选择。每个单选按钮的value属性是对应的各个Choice的ID。每个单选按钮的name是‘choice’。这意味着,当有人选择一个单选按钮并提交表单提交时,它将发送一个POST数据choice=#,其中#为选择的Choice的ID。这是HTML表单的基本概念。

我们设置表单的action为{% url 'polls:vote' question.id %},并设置method='post',使用method='post'(与其相对的是method='get')是非常重要的,因为这个提交表单的行为会改变服务器端的数据。无论何时创建一个更改数据服务端的表单,请使用method='post'。这个提示不是django的特有的,这只是很好的web开发实践

forloop.counter指示for标签已经循环多少次。

由于我们创建一个POST表单(它具有修改数据的作用),所以我们需要小心跨站点请求伪造。谢天谢地,你不必太过担心,因为django已经拥有一个用来防御它的非常容易使用的系统。简而言之,所有针对内部URL的POST表单都应该使用{% csrf_token%}模板标签

猜你喜欢

转载自www.cnblogs.com/z-x-y/p/9642506.html