天天看點

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

目錄

首頁和使用者登入功能的設計:

用django的view方法直接對登入資訊進行判斷

首頁和使用者登入功能的設計:

在配置首頁的時候,在url檔案添加如下代碼進行配置:

配置登入頁面:

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

而在新版django這裡的url不需要配置路徑隻需要‘’就可以了

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

添加注冊跳轉按鈕和頁面:

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷
4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

用django的view方法直接對登入資訊進行判斷

就不用我們自己寫if了:

(綠色部分為自己寫的if語句,紅色為使用view方法的取代綠色)

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

通過from來驗證使用者送出的字段:

建立forms.py檔案:主要判斷字段是否為空,或者是否字元數量不足,如果是,則不執行下面的步驟,先報錯

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

然後,繼續回到views.py檔案

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

Urls.py裡要調整配置:

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

然後在,index.html中對登入資訊是否存在做登入狀态判斷

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

然後在,login.html中對登入資訊是否存在做登入狀态判斷錯誤提示:

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

如何通過郵箱、使用者名都可以登入:

建立Custombackend類,并繼承自ModelBackend,在類裡,使用自帶的authenticate函數,把使用者資訊儲存為user,并對password進行驗證,儲存為user,即可

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

然後在setting中,建立元祖,注冊上面的類,即可完成郵箱、使用者名或其他多字段的登入操作:

4、首頁和使用者登入功能的設計首頁和使用者登入功能的設計:用django的view方法直接對登入資訊進行判斷

完整的登入代碼:(view.py檔案)

from django.shortcuts import render
from django.contrib.auth import authenticate,login
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from django.views.generic.base import View

from .models import UserProfile
#導入LoginForm來對使用者輸入的字段做驗證
from .forms import LoginForm

# Create your views here.


#單個使用者的多字段的均可登入判斷邏輯
class Custombackend(ModelBackend):
    def authenticate(self, request, 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


#調用View類并繼承,對get或post過來的使用者資料進行判斷:
class LoginView(View):
    def get(self,request):
        return render(request, 'login.html', {})
    def post(self,request):
        # 生成LoginForm對象,判斷login_form.is_valid(),然後跟上後續
        login_form = LoginForm(request.POST)
        if login_form.is_valid():
            username = request.POST.get('username', '')
            password = request.POST.get('password', '')
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                return render(request, 'index.html')
            else:
                #驗證賬号密碼之後,如果不正确再傳回錯誤
                return render(request, 'login.html', {'msg': '使用者名或密碼不正确!'})
        else:
            #在驗證賬号密碼之前,如果資料字段不滿足,就直接傳回login_form的錯誤提示
            return render(request, 'login.html', {'login_form':login_form})