继续上一篇,我们在继续完成其他页面设置之前,先把老师登录后的页面给创建出来,并且学生与老师不能互访门户,以及实现注销功能。
回到【实战演练】Python+Django网站开发系列02-Django完整开发环境部署,对于老师页面,具有以下模块。
1、需求分析
老师登录后页面包括如下功能:
1)个人信息:登录后显示老师个人信息,以及自己需要授课的课程名、上课时间、上课地点。
2)成绩录入:可以查看自己授课的课程下面的学生,并且可以录入成绩,成绩仅能为0~100分,超出范围会提示无效,可以多次修改成绩。
3)修改密码:修改用户密码
4)注销:注销后自动返回登录页面
其中注销可以与学生的注销共用,但是修改密码不行,因为点击修改密码页面后,学生的修改密码页面引用的是BASE02的导航页,如果老师门户的导航页是BASE03,而修改密码页面共用,在老师门户点击“修改密码”之后,就会跳转到了BASE02页去了,会出现BUG。
2、代码开发
因此现在需要先创建BASE03,BASE03可以在BASE02基础上复制粘贴修改,修改标签与href后面跳转的页面
{% .== %} {% %} 个人信息{% .== %} {% %} 成绩录入{% .== %} {% %} 修改密码注销
然后创建老师个人信息、成绩录入,老师修改密码3个html页面,并且在view里面
(request): render_to_response(())
(request): render_to_response(())
(request): render_to_response(())
国际惯例,在views里面添加函数,在urls里面添加路由。
url(enterscore)url(tmopasswd)url(tchinfo)
然后访问127.0.0.1:8000/index,用老师账户登录看看是否能够成功跳转。
剩下需要做两个事情:
1、注销:
添加注销的view函数,
(request): auth.logout(request) HttpResponseRedirect()
增加urls路由:
url(r'^logout/', logout),
BASE02、03的注销标签绑定url
注销
然后刷新,重新登录,点击注销按钮,发现可以跳转回index.html登录页。
2、限制学生门户的所有页面不要给老师用户登录,老师门户所有页面
这个需要再在每个页面前面增加装饰器,判定登录账号的权限,来看看是否有权限进入页面。permission_required后面填写之前用户组给予了的权限。
每个页面都需要加这个@permission_required装饰器。不同门户的页面添加学生或者老师的权限要求。
(==) (request): render_to_response(())
(==) (request): data = student.objects.all() render_to_response(())
测试:
不登录,直接访问页面url如127.0.0.1:8000/queryscore,发现无法访问,报错如下:
使用老师账号登录,直接访问url127.0.0.1:8000/queryscore,显示403 无权限访问。
使用学生账号从index登录,然后正常访问queryscore页面,访问正常。
3、修改密码页面直接引用django admin的修改密码
编辑mopasswd与tmopasswd.html,我们用iframe子框架来在我们的页面里面嵌套django admin自带的密码修改。
{% %} ::{% %}
然后修改views里面的函数,获取当前登录用户session。
(request): username = request.session.get() render_to_response(())
(request): username = request.session.get() render_to_response(())
查看效果,发现iframe大小不够,再回去手动调整iframe的width与height即可。
回顾:
1、我们实现了使用django admin自带的用户创建功能创建用户;
2、实现了index与后台数据库交互进行用户认证鉴权(使用django admin自带的auth模块),实现了登录认证效果。
3、实现了学生登录通过后重定向到学生门户,老师登录通过后重定向到老师门户。
4、实现了注销功能。
5、未登录无法直接访问所有子页面。
6、学生无法访问老师门户任何页面,同样老师无法访问学生门户任何页面,即使记住了url直接访问。
7、实现了修改密码。
至此,静态页面,导航栏,用户登录验证,注销,修改密码,防止未登录/无权限的用户访问页面等功能都已经实现了。
下一篇开始,主要就剩下前端与后端与数据库的交互增、删、改了(查已经做了)。