开发一个考试系统——后台管理系统登录界面设计与访问限制处理

186 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情

上一篇我们进行了管理界面及其功能设计,这一篇我们编写第一个登录页面,并实现其他页面的登录访问。

这个项目的链接是:https://github.com/Amor122/MyTest.git

我已经设置了公开权限,大家都可以访问,项目每天的进度基本上是和文章更新一致的,或者略快于文章,我也是边写边发的,有些代码在后续版本说不定就更改了。代码的字数意义不大,有需要的都可以去项目上直接看,这里我都换成了图片。

一、界面

登录界面很简单,只需要输入用户的唯一识别号码及其密码即可。

image.png 密码的校验使用django自带的django.contrib.auth.hashers 中的make_password 和check_password进行处理,更加方便简洁。

这里需要修改原有人员模型的保存函数。

image.png

 

二、Session处理登录状态

使用django中的session模块来保存登录状态,使得登录可以持续一段时间,并在请求的中间校验这个登录状态,将未登录的用户或者登录时间已经过期的用户直接踢下线,达到实现登录状态控制和权限控制的目的。

在设计中,我们准备让老师(学校的管理人员)才能进入到这个系统里,排除所有学生的访问。

先把session功能配置好

这里使用本地文件缓存的session方式进行存储

image.png

针对登录页面提交上来的表单数据,进行了多级判断处理

image.png  

第一级判断账号是否存在

第二级判断密码账号能否验证通过

第三级判断用户是否属于这个预定义的有权限用户群体

通过多级判断的请求将指向欢迎页面,否则将重新回到登录页并提示错误消息。

  image.png

提示消息可以尽量化简,不需要让用户知道到底是什么地方的问题,避免尝试攻击性的登录。

 

三、检验状态,去除非法登录

Session和cookie的配合使用,将这个用户的登录可以储存起来,在每个页面看到用户的用户名信息,cookie有有效期,可以控制页面的生命周期,在超过有效期后将重新登录。

这里通过中间件的方式将这个功能实现。中间件需要在settings文件中的middleware列表配置。

image.png

 

中间件中将涉及到human_management模块的所有请求链接都检查一遍,排除admin和login页面的,如果里面没有设置的这个cookie,那么我们就将请求重定向到登录页面上去。这样也可以阻止非法用户绕过登录界面直接进入某些页面中。