目錄
首頁和使用者登入功能的設計:
用django的view方法直接對登入資訊進行判斷
首頁和使用者登入功能的設計:
在配置首頁的時候,在url檔案添加如下代碼進行配置:
配置登入頁面:
而在新版django這裡的url不需要配置路徑隻需要‘’就可以了
添加注冊跳轉按鈕和頁面:
用django的view方法直接對登入資訊進行判斷
就不用我們自己寫if了:
(綠色部分為自己寫的if語句,紅色為使用view方法的取代綠色)
通過from來驗證使用者送出的字段:
建立forms.py檔案:主要判斷字段是否為空,或者是否字元數量不足,如果是,則不執行下面的步驟,先報錯
然後,繼續回到views.py檔案
Urls.py裡要調整配置:
然後在,index.html中對登入資訊是否存在做登入狀态判斷
然後在,login.html中對登入資訊是否存在做登入狀态判斷錯誤提示:
如何通過郵箱、使用者名都可以登入:
建立Custombackend類,并繼承自ModelBackend,在類裡,使用自帶的authenticate函數,把使用者資訊儲存為user,并對password進行驗證,儲存為user,即可
然後在setting中,建立元祖,注冊上面的類,即可完成郵箱、使用者名或其他多字段的登入操作:
完整的登入代碼:(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})