上一篇讲到最简单的表单处理,就将输入的字符串输出了。
这么简单的表单处理可不行,接下来我们以一个用户注册的例子说明怎么验证数据。
验证数据要用到django.forms模块。
首先我们在templates目录下新建一个forms.py文件,添加代码:
#-*- coding: utf-8 -*-
from django import forms
class AccountForm(forms.Form):
Email = forms.EmailField() #规定文本为email格式
Name = forms.CharField() #无限制条件
Password = forms.CharField(min_length=8) #密码最短8位
#这就是指定的数据格式
然后我们新建另一个html文件register.html,添加代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>表单数据验证</title>
<style type="text/css">
body, div {
padding: 0;
margin: 0;
}
#container {
width: 1070px;
margin: 0 auto;
}
.wrap {
width: 360px;
height: 48px;
margin: 0 auto;
}
.wrap form input {
width: 240px;
height: 24px;
margin-top: 12px;
}
</style>
</head>
<body>
<div id="container">
<div class="wrap">
<form action="." class="crawl" method="POST">
<h3>用户注册</h3>
{% csrf_token %}
<table>
{{ form.as_table }}{#as_table 是form 的一个方法,它把 form 渲染成一系列的表格行#}
</table>
<button type="submit">
提交
</button>
</form>
{% if results %}
<h2>{{ results }}</h2>
{% endif %}
</div>
</div>
</body>
</html>
这一次我们把表单的提交方式改为POST,所以要注意下面三点:
1. 在views里面,强制使用RequestContext代替Context,看到函数中的RequestContext(request)了吗?
2. 在模板的form体里面,加入{% csrf_token %}
3. 确认settings.py文件里面MIDDLEWARE_CLASSES = ( 'django.middleware.csrf.CsrfViewMiddleware',)没有被注释。
如果没有解决这三个问题,在提交表单的时候会遇到CSRF verification failed. Request aborted.
最后在urls.py中添加:(r'^reg/', 'register'),
在浏览器中打开127.0.0.1:8000/reg/
运行结果无法上图了,废话一下吧。假如你在email框输入的字符串不是email格式,系统会弹出消息提醒你。不过它只做一般的检查,至于该邮箱存不存在还得另想办法。