继续上一篇,我们在继续完成其他页面设置之前,先把老师登录后的页面给创建出来,并且学生与老师不能互访门户,以及实现注销功能。


回到【实战演练】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,用老师账户登录看看是否能够成功跳转。

【实战演练】Python+Django网站开发系列08-django门户互访控制与注销、修改密码_第1张图片

【实战演练】Python+Django网站开发系列08-django门户互访控制与注销、修改密码_第2张图片

剩下需要做两个事情:

1、注销:

添加注销的view函数,

(request):
    auth.logout(request)
    HttpResponseRedirect()

增加urls路由:

url(r'^logout/', logout),

BASE02、03的注销标签绑定url

注销

然后刷新,重新登录,点击注销按钮,发现可以跳转回index.html登录页。

【实战演练】Python+Django网站开发系列08-django门户互访控制与注销、修改密码_第3张图片

【实战演练】Python+Django网站开发系列08-django门户互访控制与注销、修改密码_第4张图片

2、限制学生门户的所有页面不要给老师用户登录,老师门户所有页面

这个需要再在每个页面前面增加装饰器,判定登录账号的权限,来看看是否有权限进入页面。permission_required后面填写之前用户组给予了的权限。

每个页面都需要加这个@permission_required装饰器。不同门户的页面添加学生或者老师的权限要求。

(==)
(request):
    render_to_response(())
(==)
(request):
    data = student.objects.all()
    render_to_response(())


测试:

不登录,直接访问页面url如127.0.0.1:8000/queryscore,发现无法访问,报错如下:

【实战演练】Python+Django网站开发系列08-django门户互访控制与注销、修改密码_第5张图片

使用老师账号登录,直接访问url127.0.0.1:8000/queryscore,显示403 无权限访问。

【实战演练】Python+Django网站开发系列08-django门户互访控制与注销、修改密码_第6张图片

使用学生账号从index登录,然后正常访问queryscore页面,访问正常。

【实战演练】Python+Django网站开发系列08-django门户互访控制与注销、修改密码_第7张图片


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即可。

【实战演练】Python+Django网站开发系列08-django门户互访控制与注销、修改密码_第8张图片


回顾:

1、我们实现了使用django admin自带的用户创建功能创建用户;

2、实现了index与后台数据库交互进行用户认证鉴权(使用django admin自带的auth模块),实现了登录认证效果。

3、实现了学生登录通过后重定向到学生门户,老师登录通过后重定向到老师门户。

4、实现了注销功能。

5、未登录无法直接访问所有子页面。

6、学生无法访问老师门户任何页面,同样老师无法访问学生门户任何页面,即使记住了url直接访问。

7、实现了修改密码。

至此,静态页面,导航栏,用户登录验证,注销,修改密码,防止未登录/无权限的用户访问页面等功能都已经实现了。

下一篇开始,主要就剩下前端与后端与数据库的交互增、删、改了(查已经做了)。