欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2017年12月11日 14:09:08   作者:brynao  
這篇文章主要介紹了django實(shí)現(xiàn)用戶登陸功能詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。

簡(jiǎn)介:

Python下有許多款不同的 Web 框架。Django是重量級(jí)選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。

Django是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架,由Python寫(xiě)成。

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文件:
以下代碼重寫(xiě)了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
# 重寫(xiě) 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ù)器的訪問(wèn)次數(shù)。

# 基于類實(shí)現(xiàn)用戶登陸
class LoginView(View):
  # 會(huì)根據(jù) method 調(diào)用 post或者get方法
  def get(self, request):
    # 如果method為 GET 重新返回登陸頁(yè)面
    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", "")
      # 此處為上面重寫(xiě)的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è)定長(zhǎng)度限制min_length、max_length
  password = forms.CharField(required=True, min_length=5)

html中要寫(xiě)出登陸出錯(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)用戶登陸功能詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

Python通過(guò)Django實(shí)現(xiàn)用戶注冊(cè)和郵箱驗(yàn)證功能代碼

django上傳圖片并生成縮略圖方法示例

Python編程django實(shí)現(xiàn)同一個(gè)ip十分鐘內(nèi)只能注冊(cè)一次

如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • pytorch AvgPool2d函數(shù)使用詳解

    pytorch AvgPool2d函數(shù)使用詳解

    今天小編就為大家分享一篇pytorch AvgPool2d函數(shù)使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python與AI分析時(shí)間序列數(shù)據(jù)

    Python與AI分析時(shí)間序列數(shù)據(jù)

    預(yù)測(cè)給定輸入序列中的下一個(gè)是機(jī)器學(xué)習(xí)中的另一個(gè)重要概念.本章為您提供有關(guān)分析時(shí)間序列數(shù)據(jù)的詳細(xì)說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-05-05
  • python的time模塊和datetime模塊實(shí)例解析

    python的time模塊和datetime模塊實(shí)例解析

    這篇文章主要介紹了python的time模塊和datetime模塊實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python 讀寫(xiě)txt文件 json文件的實(shí)現(xiàn)方法

    python 讀寫(xiě)txt文件 json文件的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇python 讀寫(xiě)、創(chuàng)建 文件的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • python?Pandas之DataFrame索引及選取數(shù)據(jù)

    python?Pandas之DataFrame索引及選取數(shù)據(jù)

    這篇文章主要介紹了python?Pandas之DataFrame索引及選取數(shù)據(jù),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • python中不能連接超時(shí)的問(wèn)題及解決方法

    python中不能連接超時(shí)的問(wèn)題及解決方法

    這篇文章主要介紹了python中不能連接超時(shí)的問(wèn)題及解決方法,需要的朋友可以參考下
    2018-06-06
  • Python解包中*和**的最全用法

    Python解包中*和**的最全用法

    本文主要介紹了Python解包中*和**的最全用法,它們具有多種用途,包括解包參數(shù)、擴(kuò)展序列、字典和集合操作等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • 一文詳細(xì)介紹Python中pkl格式文件

    一文詳細(xì)介紹Python中pkl格式文件

    .pkl文件是Python中用于存儲(chǔ)對(duì)象的文件格式,全稱是"pickle",它是Python標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,用于將Python對(duì)象序列化,以便于在不同的Python程序之間進(jìn)行傳輸或存儲(chǔ),這篇文章主要給大家介紹了如何通過(guò)一文詳細(xì)介紹Python中pkl格式文件的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • SpringMVC和SpringBoot接收參數(shù)的幾種方式詳解

    SpringMVC和SpringBoot接收參數(shù)的幾種方式詳解

    這篇文章主要介紹了SpringMVC和SpringBoot接收參數(shù)的幾種方式詳解,Spring是分層的JavaSE/EE應(yīng)用輕量級(jí)開(kāi)源框架,以IoC和AOP為內(nèi)核,提供了展現(xiàn)層 Spring MVC和持久層Spring JDBC以及業(yè)務(wù)層事務(wù)管理等眾多的企業(yè)級(jí)應(yīng)用技術(shù),需要的朋友可以參考下
    2023-07-07
  • python的命名規(guī)則知識(shí)點(diǎn)總結(jié)

    python的命名規(guī)則知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家分享的是關(guān)于python的命名規(guī)則知識(shí)點(diǎn)總結(jié),有需要的朋友們可以參考下。
    2019-10-10

最新評(píng)論