• 在视图中使用Form对象

    在视图中使用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()被调用时,你将得到一个错误提示。而这是另一个问题。)