此时数据库虽然已经添加了数据,但如果你继续刷新浏览器数据库也会保存重复的数据,
这就需要重定向,我们需要在我们刷新浏览器的时候,数据库不会重新添加重复的数据
- 转发和重定向:
-
转发:一次请求和响应,请求的地址没有发生变化, 请求数据被服务器内部的资源共享
如果此时刷新页面就会出现重做现象
-
重定向:一次以上的请求和响应,请求地址发生一次以上的变化。如果此时刷新页面不会出现重做现象
我们需要在我们的views.py里面导入redirect和reverse模块,然后需要在我们刷新的时候跳转到另一个页面, 修改一下代码
同时我们需要在BlogUser\urls.py里边配置路径,同时添加app_name='user'
接着在blog\urls.py路径里边添加 namespace='user’
- 接下来我们在views.py里为welcome定义一个函数
接着我们重新运行项目 再次提交 可以看到地址栏内地址再次刷新并不会有变化,数据库也不会重复保存
注册新用户的时候我们要保证用户名不能重复 我们需要修改models.py里面的内容,为数据库添加唯一约束
但这时我们的数据库并没有发生变化,因为我们数据库已经有重复的用户名了,已经违背了原则,所以我们可以将数据库中生成的两个表全都删去然后重新创建
接着我们需要重新执行manage.py的shell命令---点击Tools->选择Run manage.py
我们依然在manage.py@blog后面输入那三个命令
1、makemigrations BlogUser---敲回车,因为我们已经有了0001这个表,所以这次生成的是0002,接着我们在次执行
2、sqlmigrate BlogUser 0002--敲回车,此步骤可省略,直接输入第三个命令进行更新
3、migrate BlogUser 0002--敲回车
这时候我们可以看见数据库已经创建了两个表,并且表是有约束的当我尝试网表中添加两个username 都为a时数据库报错
我们可以通过修改views.py中的代码来不让页面显示错误,使当有用户名重复是提示信息直接在页面上提示
但时这时候我们必须点击提交才会告诉我们用户名重复,应该在我们输入密码的时候就告诉我们用户名重复
这时候我们需要使用ajax(ajax: jquery 是一种静态资源),不需要我们提交当我们输入密码的时候就可以告诉我们用户名以重复
我们需要有jquery文件,可以去官网下载,我使用的是jquery-3.3.1,我们在blog里面创建一个static的文件夹,接着又在里边创建以js的文件夹把我们的jquery-3.3.1放进去
接着我们需要在seeting.py里面添加我们的static文件
接下来在register.html中加上javascript
-
<title>Title</title> <script type="text/javascript" src="/static/js/jquery-3.3.1.js"></script> <script> $(function (){ $("input[name='username']").blur(function () { //alert("") uname=$("input [name='username']").val() CSRF=$("input[name='csrfmiddlewaretoken']").val() $.ajax({ url:'/BlogUser/getUser', data:{'uname':uname,'csrfmiddlewaretoken':CSRF}, type:'POST', success:function (dat) { if (dat=='True'){ $("span").html("用户名已存在") } else{ $("span").html("用户名可以使用") } } }); }); }); </script> </head>
在这写完之前我们需要在views.py定义一个 getUser(),同时需要导入HttpResponse模块,用来判断用户名有没有重复,同时在页面中显示提示信息
然后我们在BlogUser\urls.py配置一下路径
然后再启动项目,输入用户名且丢失焦点时,会自动提示用户名能否使用