大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程,从零开始,到最后成功部署上线的项目。这一节,我们将写404页面。
皮爷的每一篇文章,都配置相对应的代码。这篇文章的代码Tag是Post_023
前几节,我们就针对网站的功能,进行了开发,其实基本功能已经完成的差不多了,这一节,我们就要针对网站的权限进行一下管理。
权限管理分析
为什么需要权限管理?
原因就是我们在第11讲的时候,开发了Login功能,当时我们创建了管理员账号,并且随后的章节,我们开发了后台管理系统。
虽然我们有管理员账号,也有登录功能,但是细心的同学,就会发现,我们之前开发的CMS系统,其实不用登录也能使用的。
这就是Bug啊,这就是问题啊,如果上线正式环境了,你的系统岂不是随随便便就让别人登录后台了,而且还能管理你的文章?
那么今天,我们就要给CMS系统,加上权限,使得用户必须登录了才能使用CMS系统,如果没有登录,是不能使用的。
原理详解
如果一个页面,没有登录,那么就不能访问。可以实现这样功能的东西,应该就只有request了。
各位不知道注意没有,每一次我们在写视图函数的时候,不管是post方法还是get方法,或者是其他方法,都要传入一个request参数,而且是必传的。其实,这里的request,就是WSGIRequest类:
他是继承自django.http.HttpRequest
类,这个类的官方文档:
https://docs.djangoproject.com/en/3.0/ref/request-response/
针对我们,如果要实现用户登录之后才能访问,那么我们就可以看到,HttpRequest里面有一个变量,叫user
。我们就可以拿这个变量来做判断。
核心的代码,其实就是下面这段:
if request.user.is_authenticated:
... # Do something for logged-in users.
else:
... # Do something for anonymous users.
我们要通过修饰器的方式来实现权限管理。什么是修饰器?就是在一个方法前面,通过@xxx
来写的修饰器。用来修饰整个方法。
登出方法
我们之前的Login页面有登录方法,我们还需要写一个登出方法,并且放到CMS顶部的Navbar上面。
def logout_view(request):