基于Django用户认证系统详解
一.认证系统概要
create_user创建用户
authenticate验证登录
login记住用户的登录状态
logout退出登录
is_authenticated判断用户是否登录
login_required判断用户是否登录的装饰器
二.创建用户和验证登录
当用户注册的时候用create_user(username,password,email)默认情况下is_active=True,is_staff=False,is_superuser=False。
底层将password用hash算法加密之后存储到数据库中。
当用户登录的时候用authenticate(username=username,password=password)验证登录,判断数据库中是否存在用户输入的账号和密码,返回一个user对象。
底层将password用hash算法加密后和数据库中password进行对比。
三.记住用户的登录状态
当用户登录的时候用login(request,user)来记住用户的登录状态,默认将用户的id存储在session中。
login有两个参数一个是request,一个是user,user的来源必须是authenticate返回的。也就是说用login之前必须先调用authenticate。
四.退出登录
当用户注销的时候用logout(request),只需要一个参数request。
五.判断用户是否登录
在后台的视图函数里可以用request.user.is_authenticated()判断用户是否登录
在前端页面中可以用{%ifuser.is_authenticated%}{%endif%}判断用户是否登录
六.装饰器判断用户是否登录
基于普通的视图函数可以使用@login_required来装饰,但是基于类视图的get和post方法不能直接使用@login_required来装饰。
基于类视图的装饰有以下三种:
第一种:在urls文件中导入login_requtred,直接装饰as_view()函数
url(r'^$',login_required(UserInfoView.as_view()),name='user')
第二种:自定义一个LoginRequiredView类继承View类,重写as_view()函数,并装饰as_view()函数的返回值。我们自定义的视图类就不需要再继承View类,直接继承LoginRequiredView类就好了。
classLoginRequiredView(View): @classmethod defas_view(cls,**initkwargs): #调用View类中as_view方法 view=super(LoginRequiredView,cls).as_view(**initkwargs) #调用login_required装饰器 returnlogin_required(view)
第三种:自定义一个LoginRequiredMixin类,重写as_view()函数,调用View中的as_view()函数,并装饰as_view()函数的返回值。我们自定义的视图类需要先继承LoginRequiredMixin类再继承View类。这种方式的关键点在于:多继承中super()的调用顺序和__mro__的顺序是一样的。
classLoginRequiredMixin(object): @classmethod defas_view(cls,**initkwargs): #调用View类中as_view方法 view=super(LoginRequiredMixin,cls).as_view(**initkwargs) #调用login_required装饰器 returnlogin_required(view)
以上这篇基于Django用户认证系统详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。