django實現用戶登陸功能詳解

簡介:
Python下有許多款不同的 Web 框架。Django是重量級選手中最有代表性的一位。許多成功的網站和APP都基于Django。
Django是一個開放源代碼的Web應用框架,由Python寫成。
Django遵守BSD版權,初次發(fā)布于2005年7月, 并于2008年9月發(fā)布了第一個正式版本1.0 。
Django采用了MVC的軟件設計模式,即模型M,視圖V和控制器C。
用戶名密碼登陸實現:
在apps.users下找到views.py文件:
以下代碼重寫了authenticate()方法,方便用戶擴展功能,比如郵箱驗證登陸等。
在setting.py中重載一個變量:
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 實現基于類的用戶登陸
from django.views.generic.base import View
from .models import UserProfile
# 重寫 authenticate 登陸驗證方法
class CustomBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
try:
# 驗證用戶名或郵箱, Q提供了一個對象間的或(與&)運算
user=UserProfile.objects.get(Q(username=username) | Q(email=username))
# 后臺密碼為暗文,傳入的密碼為明文, 所以需要使用check_password()方法驗證密碼
if user.check_password(password):
# 驗證成功返回user對象
return user
# 登陸失敗返回None
except Exception as e:
return None
繼承django.views.generic.base中的View類,根據method的不同,對應實現GET和POST的不同處理,一般POST為驗證用戶登陸,在此基礎上還可以添加form處理,減少錯誤提交,減少對服務器的訪問次數。
# 基于類實現用戶登陸
class LoginView(View):
# 會根據 method 調用 post或者get方法
def get(self, request):
# 如果method為 GET 重新返回登陸頁面
return render(request, "login.html", {})
def post(self, request):
# 驗證每個字段是否合法
login_form = LoginForm(request.POST)
# 對每個字段進行預處理,如果不合法,直接提示錯誤信息
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": "用戶已經存在"})
pass_word = request.POST.get("password", "")
# 此處為上面重寫的authenticate方法
user = authenticate(username=user_name, password=pass_word)
if user is not None: # 如果成功返回對象,失敗返回None
login(request, user) # 調用login方法登陸賬號
return render(request, "index.html")
else:
# 登陸失敗
return render(request, "login.html", {"msg":u"用戶名或密碼錯誤"})
else:
# form驗證失敗,給出錯誤信息
return render(request, "login.html", {"login_form":login_form})
要實現form處理功能,在form.py中定義具體要求即可:
from django import forms # 繼承forms.Form class LoginForm(forms.Form): # 如果為空則報錯 username = forms.CharField(required=True) # 同時也可以設定長度限制min_length、max_length password = forms.CharField(required=True, min_length=5)
html中要寫出登陸出錯之后,信息提示的邏輯:
<div class="form-group marb20 {% if login_form.errors.username %}errorput{% endif %}">
form驗證錯誤的提示:
<div class="error btns login-form-tips" id="jsLoginTips">{% for key,error in login_form.errors.items %}{{ error }}{% endfor %} {{ msg }}</div>
總結
以上就是本文關于django實現用戶登陸功能詳解的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:
Python編程django實現同一個ip十分鐘內只能注冊一次
如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關文章
python?Pandas之DataFrame索引及選取數據
這篇文章主要介紹了python?Pandas之DataFrame索引及選取數據,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-07-07
SpringMVC和SpringBoot接收參數的幾種方式詳解
這篇文章主要介紹了SpringMVC和SpringBoot接收參數的幾種方式詳解,Spring是分層的JavaSE/EE應用輕量級開源框架,以IoC和AOP為內核,提供了展現層 Spring MVC和持久層Spring JDBC以及業(yè)務層事務管理等眾多的企業(yè)級應用技術,需要的朋友可以參考下2023-07-07

