Django——用戶認證和判斷用戶是否登錄


用戶認證

必須通過認證之后才能login(request,user)這樣才能保存會話到request中,注銷后會話結束

注意

  • 自定義的用戶登陸時只不止需要驗證用戶名和密碼的需要寫認證,就例如在線教育平台中需要通過郵箱或者用戶名登錄,自定義認證

views.py

from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q

class CustomBackend(ModelBackend):
    def authenticate(self, username=None, password=None, **kwargs):
        try:
            user = UserProfile.objects.get(Q(username = username)|Q(email=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None

settings.py

AUTHENTICATION_BACKENDS= (
    'users.views.CustomBackend',
)

還記得找回密碼時說的用戶未認證的錯誤嗎,在后面的時候除了登錄和判斷用戶是否登錄其它的如添加數據的user用request.user就會出錯哦

  • 自定義的用戶登陸時只需要驗證用戶名和密碼的不需要寫認證

++登錄++

from django.contrib.auth import authenticate,login,logout

def UserLogin(request):

    name = request.COOKIES.get('name')
    if name:
        return HttpResponseRedirect('/home')

    if request.method == 'POST':
        user_form = LoginForm(request.POST)
        if user_form.is_valid():
            username = user_form.cleaned_data.get('username')
            password = user_form.cleaned_data.get('password')
            # user = Profile.objects.filter(nick_name=username,password=password)
            # =================認證開始====================
            user = authenticate(username=username,password=password)
            # =================認證結束====================
            if user:
             # =================登錄====================
                login(request,user)
             #
                response = HttpResponseRedirect('/home/')
                response.set_cookie('name',username,60*60*24*1)
                return response
                # return render(request,'feedback.html')
                # 這里直接寫模版渲染,就不能設置cookie的過期時間了
    return render(request,'login.html')

注銷

def UserLogout(request):
    logout(request)
    return HttpResponseRedirect('/home/')
  • 認證之后設置的會話過期時間會影響到登錄的會話
request.session.set_expiry(40)
  • 可以通過計算時間來解決結束部分會話

用戶登錄之后才能進行一些操作

一個簡單原始的限制方法是檢查 request.user.is_authenticated() ,然后重定向到登陸頁面:

作為一個快捷方式, 你可以使用便捷的 login_required 修飾符:

views.py

from django.contrib.auth.decorators import login_required
# 需要登錄之后才執行的函數上面可以加個@login_required
@login_required
def my_view(request):
  # ......

settings.py 中需要指明裝飾器的路徑才能找到制定的登錄函數

LOGIN_URL='/login/'


免責聲明!

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



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