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


    一、

    自己写登陆需要注册,一个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 %}
  • 相关阅读:
    第二十三章 Centos7下Docker安装kibana
    第十七章 Ansibleplaybook模板部署wordpress
    第二十一章 Centos7下Docker自定义配置
    第十八章 AnsibleplaybookRole基础介绍
    第二十二章 Centos7下Docker安装Elasticsearch
    第二十一章 Centos7下Docker安装Nginx
    第二十章 Centos7下Docker安装Tomcat
    第十九章 AnsibleplaybookRole重构wordpress
    第十六章 Ansibleplaybook模板化(Jinja2)
    ABC233
  • 原文地址:https://www.cnblogs.com/weilaibuxiangshuo/p/10426135.html
Copyright © 2020-2023  润新知