|
@@ -99,7 +99,7 @@ class RegisterForm(forms.ModelForm):
|
|
|
exclude = ('no', 'regdate')
|
|
exclude = ('no', 'regdate')
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
-上面,我们定义了一个与User模型绑定的表单(继承自ModelForm),我们排除了用户编号(no)和注册日期(regdate)这两个属性,并添加了一个repassword属性用来接收从用户表单传给服务器的确认密码。我们在定义User模型时已经对用户名的最大长度进行了限制,上面我们又对确认密码的最小和最大长度进行了限制,但是这些都不足以完成我们对用户输入的验证。上面以`clean_`打头的方法就是我们自定义的验证规则。很明显,`clean_username`是对用户名的检查,而`clean_password`是对密码的检查。由于数据库二维表中不应该保存密码的原文,所以对密码做了一个简单的MD5摘要处理(实际开发中这样处理还不太够,因为有被实施反向查表法(利用彩虹表反向查询)破解用户密码的风险)。生成MD5摘要的代码如下所示。
|
|
|
|
|
|
|
+上面,我们定义了一个与User模型绑定的表单(继承自ModelForm),我们排除了用户编号(no)和注册日期(regdate)这两个属性,并添加了一个repassword属性用来接收从用户表单传给服务器的确认密码。我们在定义User模型时已经对用户名的最大长度进行了限制,上面我们又对确认密码的最小和最大长度进行了限制,但是这些都不足以完成我们对用户输入的验证。上面以`clean_`打头的方法就是我们自定义的验证规则。很明显,`clean_username`是对用户名的检查,而`clean_password`是对密码的检查。由于数据库二维表中不应该保存密码的原文,所以对密码做了一个简单的MD5摘要处理,实际开发中这样处理还不太够,因为有被实施反向查表法(利用彩虹表反向查询)破解用户密码的风险。为字符串生成MD5摘要的代码如下所示。
|
|
|
|
|
|
|
|
```Python
|
|
```Python
|
|
|
def to_md5_hex(message):
|
|
def to_md5_hex(message):
|
|
@@ -383,6 +383,8 @@ def random_color(start=0, end=255, opacity=255):
|
|
|
return red, green, blue, opacity
|
|
return red, green, blue, opacity
|
|
|
```
|
|
```
|
|
|
|
|
|
|
|
|
|
+> 说明:上面的代码在生成验证码图片时用到了三种字体文件,使用上面的代码时需要添加字体文件到应用目录下的fonts目录中。
|
|
|
|
|
+
|
|
|
下面的视图函数用来生成验证码并通过HttpResponse对象输出到用户浏览器中。
|
|
下面的视图函数用来生成验证码并通过HttpResponse对象输出到用户浏览器中。
|
|
|
|
|
|
|
|
```Python
|
|
```Python
|