Django 认证系统
到目前为止,虽然实现了登录功能,但用户登录信息的验证是有问题的,目前的做法只是简单地用 if 语句判断用户名和密码是否为“admin/admin123”
登录 Admin 后台
3.2 节在使用“migrate”命令进行数据迁移时,Django 同时也生成了 auth_user 表,该表中存放的用户信息可以用来登录 Django 自带的 Admin 管理后台。在此之前先来创建登录 Admin 后台的管理员账号。
创建的超级管理员账号/密码为:admin/admin123456.
Admin 管理后台登录地址:http://127.0.0.1:8000/admin/。
如图 3.9 和图 3.10 所示,通过创建的超级管理员账号登录 Admin 后台,单击“Add”链接添加新的用户,并用创建的用户再次登录后台,尝试一下吧!相信你可以做到。
引用 Django 认证登录
Django 已帮我们封装好了用户认证和登录的相关方法,只需拿来使用即可。并且,同样使用 auth_user 表中的数据进行验证,前面已经通过 Admin 后台向该表中添加了用户信息。
打开.../sign/views.py 文件,修改 login_action 函数。
使用 authenticate()函数认证给出的用户名和密码。它接受两个参数:username 和 password,并且会在用户名和密码正确的情况下返回一个 user 对象,否则 authenticate()返回 None。
通过 if 语句判断 authenticate()返回对象,如果不为 None,则说明用户认证通过,调用 login()函数进行登录。login()函数接收 HttpRequest 对象和一个 user 对象。
使用前面超级管理员账号(admin/admin123456),或则通过 Admin 管理后台创建用户账号来验证登录功能吧!
关上窗户
“上帝为你关上了一扇门,也一定会为你打开一扇窗”,我们为系统开发了一个需要用户认证的登录,然而,不需要通过登录也可以直接访问到登录成功的页面。
现在,尝试直接在浏览器中访问:http://127.0.0.1:8000/event_manage/
看!是不是直接打开了登录成功页,那么为什么还需要通过登录来访问这个页面呢?因此,我们需要把这些“窗户”都关上,使用户只能通过登录来访问。
再次感受一下 Django 的强大之处吧!一秒钟让你关好“窗户”。
是的,就是这么简单,如果想限制某个视图函数必须登录才能访问,则只需要再这个函数的前面加上 @login_required 的装饰即可。
你可以再次尝试访问/event_manage/目录(不要忘记清理浏览器缓存再试!),看看还能否直接访问到。
如图 3.11 所示。Django 会告诉访问的页面不存在(Page not found 404)。
如果你足够细心,就可以发现在访问被 @login_required 装饰的视图时,默认跳转的 URL 中会包含“/accounts/login”,为什么不让他直接跳转到登录页面呢?不仅要告诉用户窗户是关着的,还指引用户到门的位置登录,这样岂不是更好?
修改.../urls.py 文件,增加新的路径配置
此时,当用户访问:
http://127.0.0.1:8000/event_manage/
默认都会跳转到登录页面。但是,如果你访问的是其他不存在的路径,比如/abc/,则依然会显示如图 3.11 所示的页面。这个时候需要设置默认的 404 页面,我们会在项目部署一章来添加这个页面。
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论