自己寫登陸驗證及借用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 %}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM