在视图中使用Form对象

在学习了关于Form类的基本知识后,你会看到我们如何把它用到视图中,取代contact()代码中不整齐的部分。 一下示例说明了我们如何用forms框架重写contact()

  1. # views.py
  2. from django.shortcuts import render_to_response
  3. from mysite.contact.forms import ContactForm
  4. def contact(request):
  5. if request.method == 'POST':
  6. form = ContactForm(request.POST)
  7. if form.is_valid():
  8. cd = form.cleaned_data
  9. send_mail(
  10. cd['subject'],
  11. cd['message'],
  12. cd.get('email', 'noreply@example.com'),
  13. ['siteowner@example.com'],
  14. )
  15. return HttpResponseRedirect('/contact/thanks/')
  16. else:
  17. form = ContactForm()
  18. return render_to_response('contact_form.html', {'form': form})
  19. # contact_form.html
  20. <html>
  21. <head>
  22. <title>Contact us</title>
  23. </head>
  24. <body>
  25. <h1>Contact us</h1>
  26. {% if form.errors %}
  27. <p style="color: red;">
  28. Please correct the error{{ form.errors|pluralize }} below.
  29. </p>
  30. {% endif %}
  31. <form action="" method="post">
  32. <table>
  33. {{ form.as_table }}
  34. </table>
  35. <input type="submit" value="Submit">
  36. </form>
  37. </body>
  38. </html>

看看,我们能移除这么多不整齐的代码! Django的forms框架处理HTML显示、数据校验、数据清理和表单错误重现。

尝试在本地运行。 装载表单,先留空所有字段提交空表单;继而填写一个错误的邮箱地址再尝试提交表单;最后再用正确数据提交表单。 (根据服务器的设置,当send_mail()被调用时,你将得到一个错误提示。而这是另一个问题。)