最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

簡介:

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)證功能代碼

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

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

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

相關(guān)文章

  • 深入講解Java編程中類的生命周期

    深入講解Java編程中類的生命周期

    這篇文章主要介紹了深入講解Java編程中類的生命周期,在帶有垃圾回收功能的Java虛擬機(jī)上運(yùn)行的程序中類的生命周期就顯得格外重要,需要的朋友可以參考下
    2016-02-02
  • Python列表常用函數(shù)使用詳解

    Python列表常用函數(shù)使用詳解

    這篇文章主要為大家介紹了Python列表常用的一些函數(shù)的使用詳解,并通過一些簡單的案例讓大家更快的理解,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12
  • python卸載numpy出現(xiàn)WinError:拒絕訪問的解決方案

    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)整效果示例

    這篇文章主要介紹了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窗口方法

    今天小編就為大家分享一篇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找不到模塊的問題

    這篇文章主要介紹了關(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)的注冊功能

    本文主要介紹了Django drf使用Django自帶的用戶系統(tǒng)的注冊功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • pip?install如何指定包的安裝路徑

    pip?install如何指定包的安裝路徑

    最近學(xué)習(xí)python需要用pip下載一些包,但是發(fā)現(xiàn)下載后在pycharm中根本導(dǎo)入不了,下面這篇文章主要給大家介紹了關(guān)于pip?install如何指定包的安裝路徑的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Python字典高級(jí)用法深入分析講解

    Python字典高級(jí)用法深入分析講解

    字典作為Python的一個(gè)內(nèi)置數(shù)據(jù)結(jié)構(gòu),和列表一樣都是可變序列的,但是它是無序的,以鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù)。本文將詳解一下Python中字典的高級(jí)使用,需要的可以參考一下
    2022-10-10
  • python 自動(dòng)化偷懶的四個(gè)實(shí)用操作

    python 自動(dòng)化偷懶的四個(gè)實(shí)用操作

    這篇文章主要介紹了python 自動(dòng)化偷懶的四個(gè)實(shí)用操作,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04

最新評(píng)論

余姚市| 呼和浩特市| 垣曲县| 石门县| 应城市| 任丘市| 泾源县| 邢台市| 桓台县| 洪泽县| 莱阳市| 杭州市| 瓦房店市| 兰西县| 佛冈县| 平泉县| 隆林| 木里| 炎陵县| 始兴县| 巴塘县| 冷水江市| 安陆市| 大庆市| 都安| 卢龙县| 涡阳县| 松桃| 工布江达县| 寿阳县| 奈曼旗| 肇庆市| 恭城| 象州县| 麻城市| 鄂托克旗| 柞水县| 富宁县| 大关县| 天门市| 泾源县|