首页 > 其他 > 详细

自己写登陆验证及借用auth的is_authenticated验证是否登陆

时间:2019-02-24 14:50:54      阅读:249      评论:0      收藏:0      [点我收藏+]

一、

自己写登陆需要注册,一个session的处理,还有一个session的删除

#自定义一个闭包装饰器,来验证
def
checkLogin(func): def wrapper(request, *args, **kwargs): is_login = request.session.get(IS_LOGIN, False) if is_login: return func(request, *args, **kwargs) else: # del request.session[‘IS_LOGIN‘] return redirect(/Index/) return wrapper class Index(View): def get(self,request): is_login=request.session.get(IS_LOGIN) if is_login: del request.session[IS_LOGIN] return render(request, index.html) else: return render(request,index.html) class Login(View): def post(self,request): username=request.POST.get(username) user_list = Sjuser.objects.filter(name=username).first() request.session[IS_LOGIN] = True request.session[uname]=user_list.name contex={ user_name:user_list.name } return render(request,index.html, context=contex)
class Logout(View):
    def get(self,request):
        # logout(request)
        # request.session.flush()
        del request.session[‘IS_LOGIN‘]
        return redirect(‘/Index/‘)

注意:使用自己定义验证,必须注册删除session 要使用del request.session,不可以使用logout(request),因为此方法是专用于auth 中的用户,否则会出现匿名用户

HTML中验证可以使用

              {% if request.session.IS_LOGIN %}

二、(借用有两种方式)

1.借用django中已经有的用户类:AbstractBaseUser

在models.py中如下定义model类

from
django.contrib.auth.base_user import AbstractBaseUser class kkuser(AbstractBaseUser): name=models.CharField(max_length=30,verbose_name=u客户) total=models.IntegerField(verbose_name=u投注) class Meta: verbose_name=u抽奖客户 verbose_name_plural=verbose_name USERNAME_FIELD = name 那么在views.py中,就可以直接使用login登陆,即可实现登陆验证 from django.contrib.auth import login from .models import kkuser class Login(View): def post(self,request): username=request.POST.get(username) user_list=kkuser.objects.filter(name=username).first() if user_list: login(request, user_list) contex={ user:user_list.name } return render(request,index.html,contex)

此上面方法,虽然可以直接可以借用,但是在admin后中会出现 password,last_login ,可以使用去除:exclude = ["password", "last_login"] 即可

class kkuseradmin(object):
    list_display=[name,total]
    exclude = ["password", "last_login"]
xadmin.site.register(kkuser,kkuseradmin)

在HTML中即可使用以下方式验证

              {% if request.user.is_authenticated %}{%end if %}

 

2.借用 @property ,可以直接给所定义的model类加上属性,这个是django中已经有定义好的,可以直接拿来用

from django.utils.deprecation import CallableTrue

class kkuser(AbstractBaseUser):
    name=models.CharField(max_length=30,verbose_name=u客户)
    total=models.IntegerField(verbose_name=u投注)
    class Meta:
        verbose_name=u抽奖客户
        verbose_name_plural=verbose_name
    @property
    def is_authenticated(self):
        return CallableTrue

在HTML中即可使用此方式来验证

              {% if request.user.is_authenticated %}{%end if %}

 

自己写登陆验证及借用auth的is_authenticated验证是否登陆

原文:https://www.cnblogs.com/weilaibuxiangshuo/p/10426135.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!