这一节,我们接着上一张-----博客的注册继续讨论
在上一张的时候,我们做到最后,已经可以在数据库中成功地添加了数据;但是会有个隐藏着的一个问题,就是继续刷新浏览器,数据库会重复多次保存这个数据!
这个时候呢,就碰到了重定向问题;我们所需要的是在不论怎么去刷新浏览器,数据库中都不会重复添加数据
1.关于转发和重定向,我们需要做一个了解
转发:一次请求和响应,请求的地址没有发生变化,如果此时刷新页面就会出现重做现象。
重定向:一次以上的请求和响应,请求地址发生一次以上的变化。如果此时刷新页面不会出现重做现象。
具体的操作是这样的:
A) 去views.py文件中导入redirect 和 reverse 模块,
B) 在templates文件夹下bloguser里面创建一个show的html文件
改完之后,在运行项目提交,就能发现不管刷新多少次浏览器,页面都不发生变化,数据库也不再重复的保存数据
2.上一个问题解决了,我们就得思考下一个问题:在注册的时候,要保证用户名不重复,该怎么做?
想达到这样的效果,需要去models.py文件中修改一些代码
在这里,又会跳出一个新难题---->数据冗余(一个数据集合中重复的数据),它会产生一系列的问题:
A) 数据多次出现,表所占的空间会变大,就导致了硬盘浪费
B) 可能导致数据不一致
解决的办法就是:
1)数据库约束 唯一约束
2)通过代码
我们在models.py中创建模型,首先要导入models这个类,我们自己新建的类套继承这个类下面的Model
加一个唯一约束unique ,然而数据库没什么变化,我也不知道是什么原因,就做了一些尝试 将之前数据库生成的表全删了(也可以把表内容删了),去重新建了表
3.当我们运行程序的时候,在注册页面,提交数据库中已经存在的数据注册,就会跳出提示错误的页面,生活中比如淘宝的注册,就不会出现这样的跳转,只是会提醒用户,这个名字被占用了!
要想达到这样的效果,我们需要去views.py和 add.html文件中修改一些代码
修改好了后再运行一下项目试试,还是去提交已经存在的数据,会发现不再跳出错误提示的页面,我们点击提交后,在用户名填写框后,出现“此用户名已经被占用!请换一个”字样
不点提交,啥也不出现,这跟现实有点差距啊。。。 不是应该在输入用户名,进行下一步提交密码的时候,就出现“此用户名被占用”嘛
不用担心,这个也好解决,在学习js的时候,我们碰到过Ajax ( jQuery:一种静态资源 )