django實(shí)現(xiàn)用戶登陸功能詳解

簡介:
Python下有許多款不同的 Web 框架。Django是重量級(jí)選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。
Django是一個(gè)開放源代碼的Web應(yīng)用框架,由Python寫成。
Django遵守BSD版權(quán),初次發(fā)布于2005年7月, 并于2008年9月發(fā)布了第一個(gè)正式版本1.0 。
Django采用了MVC的軟件設(shè)計(jì)模式,即模型M,視圖V和控制器C。
用戶名密碼登陸實(shí)現(xiàn):
在apps.users下找到views.py文件:
以下代碼重寫了authenticate()方法,方便用戶擴(kuò)展功能,比如郵箱驗(yàn)證登陸等。
在setting.py中重載一個(gè)變量:
AUTHENTICATION_BACKENDS = ('users.views.CustomBackend',)
from django.contrib.auth import authenticate, login
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
# 繼承View 實(shí)現(xiàn)基于類的用戶登陸
from django.views.generic.base import View
from .models import UserProfile
# 重寫 authenticate 登陸驗(yàn)證方法
class CustomBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
try:
# 驗(yàn)證用戶名或郵箱, Q提供了一個(gè)對(duì)象間的或(與&)運(yùn)算
user=UserProfile.objects.get(Q(username=username) | Q(email=username))
# 后臺(tái)密碼為暗文,傳入的密碼為明文, 所以需要使用check_password()方法驗(yàn)證密碼
if user.check_password(password):
# 驗(yàn)證成功返回user對(duì)象
return user
# 登陸失敗返回None
except Exception as e:
return None
繼承django.views.generic.base中的View類,根據(jù)method的不同,對(duì)應(yīng)實(shí)現(xiàn)GET和POST的不同處理,一般POST為驗(yàn)證用戶登陸,在此基礎(chǔ)上還可以添加form處理,減少錯(cuò)誤提交,減少對(duì)服務(wù)器的訪問次數(shù)。
# 基于類實(shí)現(xiàn)用戶登陸
class LoginView(View):
# 會(huì)根據(jù) method 調(diào)用 post或者get方法
def get(self, request):
# 如果method為 GET 重新返回登陸頁面
return render(request, "login.html", {})
def post(self, request):
# 驗(yàn)證每個(gè)字段是否合法
login_form = LoginForm(request.POST)
# 對(duì)每個(gè)字段進(jìn)行預(yù)處理,如果不合法,直接提示錯(cuò)誤信息
pre_check = login_form.is_valid()
# 如果合法
if pre_check:
# 從POST中取出用戶名和密碼
user_name = request.POST.get("username", "")
if UserProfile.objects.filter(email=user_name):
return render(request, "register.html", {"register_form": register_form, "msg": "用戶已經(jīng)存在"})
pass_word = request.POST.get("password", "")
# 此處為上面重寫的authenticate方法
user = authenticate(username=user_name, password=pass_word)
if user is not None: # 如果成功返回對(duì)象,失敗返回None
login(request, user) # 調(diào)用login方法登陸賬號(hào)
return render(request, "index.html")
else:
# 登陸失敗
return render(request, "login.html", {"msg":u"用戶名或密碼錯(cuò)誤"})
else:
# form驗(yàn)證失敗,給出錯(cuò)誤信息
return render(request, "login.html", {"login_form":login_form})
要實(shí)現(xiàn)form處理功能,在form.py中定義具體要求即可:
from django import forms # 繼承forms.Form class LoginForm(forms.Form): # 如果為空則報(bào)錯(cuò) username = forms.CharField(required=True) # 同時(shí)也可以設(shè)定長度限制min_length、max_length password = forms.CharField(required=True, min_length=5)
html中要寫出登陸出錯(cuò)之后,信息提示的邏輯:
<div class="form-group marb20 {% if login_form.errors.username %}errorput{% endif %}">
form驗(yàn)證錯(cuò)誤的提示:
<div class="error btns login-form-tips" id="jsLoginTips">{% for key,error in login_form.errors.items %}{{ error }}{% endfor %} {{ msg }}</div>
總結(jié)
以上就是本文關(guān)于django實(shí)現(xiàn)用戶登陸功能詳解的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
Python通過Django實(shí)現(xiàn)用戶注冊和郵箱驗(yàn)證功能代碼
Python編程django實(shí)現(xiàn)同一個(gè)ip十分鐘內(nèi)只能注冊一次
如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
- django用戶注冊、登錄、注銷和用戶擴(kuò)展的示例
- Django實(shí)戰(zhàn)之用戶認(rèn)證(用戶登錄與注銷)
- django用戶登錄和注銷的實(shí)現(xiàn)方法
- Django 生成登陸驗(yàn)證碼代碼分享
- Django 登陸驗(yàn)證碼和中間件的實(shí)現(xiàn)
- Django框架首頁和登錄頁分離操作示例
- Django利用cookie保存用戶登錄信息的簡單實(shí)現(xiàn)方法
- Django框架登錄加上驗(yàn)證碼校驗(yàn)實(shí)現(xiàn)驗(yàn)證功能示例
- Django框架實(shí)現(xiàn)的普通登錄案例【使用POST方法】
- Django實(shí)現(xiàn)單用戶登錄的方法示例
- django與小程序?qū)崿F(xiàn)登錄驗(yàn)證功能的示例代碼
- Django框架用戶注銷功能實(shí)現(xiàn)方法分析
相關(guān)文章
python卸載numpy出現(xiàn)WinError:拒絕訪問的解決方案
這篇文章主要介紹了python卸載numpy出現(xiàn)WinError:拒絕訪問的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Python實(shí)現(xiàn)PS圖像明亮度調(diào)整效果示例
這篇文章主要介紹了Python實(shí)現(xiàn)PS圖像明亮度調(diào)整效果,結(jié)合實(shí)例形式分析了Python基于skimage模塊調(diào)整圖片明亮度的原理與具體操作技巧,需要的朋友可以參考下2018-01-01
Python實(shí)現(xiàn)定時(shí)自動(dòng)關(guān)閉的tkinter窗口方法
今天小編就為大家分享一篇Python實(shí)現(xiàn)定時(shí)自動(dòng)關(guān)閉的tkinter窗口方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
關(guān)于jupyter lab安裝及導(dǎo)入tensorflow找不到模塊的問題
這篇文章主要介紹了關(guān)于jupyter lab安裝及導(dǎo)入tensorflow找不到模塊的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Django drf使用Django自帶的用戶系統(tǒng)的注冊功能
本文主要介紹了Django drf使用Django自帶的用戶系統(tǒng)的注冊功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
python 自動(dòng)化偷懶的四個(gè)實(shí)用操作
這篇文章主要介紹了python 自動(dòng)化偷懶的四個(gè)實(shí)用操作,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-04-04

