python django 做一个blog(2)
接上一篇
此时数据库虽然已经添加了数据,但如果你继续刷新浏览器数据库也会保存重复的数据,我刷新了浏览器这里数据库给我重复保存了张三
这就需要重定向,我们需要在我们刷新浏览器的时候,数据库不会重新添加重复的数据
(转发和重定向:
转发:一次请求和响应,请求的地址没有发生变化,如果此时刷新页面就会出现重做现象
重定向:一次以上的请求和响应,请求地址发生一次以上的变化。如果此时刷新页面不会出现重做现象 )
我们需要在我们的views.py里面导入redirect和reverse模块,然后需要在我们刷新的时候跳转到另一个页面,我们在里面创建一个 show() 通过用户的id来显示到页面上, 修改一下代码
同时我们需要在bloguser\urls.py里边配置路径,同时添加app_name='user
'
接着在pyblog\urls.py路径里边添加 namespace='user'
接着我们重新运行项目 再次提交
可以看到地址栏内地址为http://127.0.0.1:8000/user/show/15/再次刷新并不会有变化,数据库也不会重复保存
注册新用户的时候我们要保证用户名不能重复 我们需要修改models.py里面的内容
(数据冗余:
1.数据库约束 唯一约束
2.通过代码)
但这时我们的数据库并没有发生变化,因为我们数据库已经有重复的用户名了,已经违背了原则,所以我们可以将数据库中生成的两个表全都删去然后重新创建表
用快捷键 Ctrl+alt+R进入然后来创建表
因为我们已经有了0001这个表,所以这次生成的是0002,接着我们在次执行shell命令生产表
这时候我们可以看见数据库已经创建了两个表,并且表是有约束的当我尝试网表中添加两个username 都为a时数据库报错
在次运行程序添加数据库已有的a看看效果
我们可以通过修改views.py中的代码来不让这个错误显示,使当有用户名重复是提示信息直接在页面上提示
我们还需要在add.html中添加一下错误信息
这样我们继续运行程序然后接着注册数据库中已有的a看看结果
这时候我们可以看到当我注册数据库中已有的名字时浏览器可以提示我们‘用户名重复’
但时这时候我们必须点击提交才会告诉我们用户名重复,应该在我们输入密码的时候就告诉我们用户名重复
这时候我们需要使用ajax(ajax: jquery 是一种静态资源),不需要我们提交当我们输入密码的时候就可以告诉我们用户名以重复
我们需要有jquery文件,可以去官网下载,我使用的是jquery-3.3.1,我们在pyblog里面创建一个static的文件夹,接着又在里边创建以js的文件夹把我们的jquery-3.3.1放进去
接着我们需要在seeting.py里面添加我们的static文件
接着我么运行项目在浏览器地址栏输入http://127.0.0.1:8000/static/js/jquery-3.3.1.js结果为
说明我们可以使用jquery文件了,我们在add.html中加上javascript
在这写完之前我们需要在views.py定义一个 hasname(),同时需要导入HttpResponse模块,用来判断用户名有没有重复,同时在页面中显示提示信息
然后我们在bloguser\urls.py配置一下路径
然后运行一下项目试一下
先填写数据库中已有的数据a
不用点击提交它会自己提示用户名已被占用,再来填写一个数据库中没有的
接着我们来做一下登陆功能
我们首先在templates创建一个welcome.html,用来显示登陆成功的页面,接着在templates\bloguser里创建一个login.html,用来显示登陆的页面
接着在views.py中创建登录的函数login()和登录成功的函数welcome()
接着我们先在pyblog\urls.py配置一下路径我们需要在bloguser.vews.py中导入welcome
接着在bloguser\urls.py中配置路径
运行程序试一下再浏览器地址栏输入http://127.0.0.1:8000/user/login
先登录一下数据库中有的数据
在登录一下没有的