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

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

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

簡介:

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

Django是一個開放源代碼的Web應用框架,由Python寫成。

Django遵守BSD版權(quán),初次發(fā)布于2005年7月, 并于2008年9月發(fā)布了第一個正式版本1.0 。

Django采用了MVC的軟件設(shè)計模式,即模型M,視圖V和控制器C。

用戶名密碼登陸實現(xiàn):

在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 實現(xiàn)基于類的用戶登陸
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類,根據(jù)method的不同,對應實現(xiàn)GET和POST的不同處理,一般POST為驗證用戶登陸,在此基礎(chǔ)上還可以添加form處理,減少錯誤提交,減少對服務(wù)器的訪問次數(shù)。

# 基于類實現(xiàn)用戶登陸
class LoginView(View):
  # 會根據(jù) method 調(diào)用 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": "用戶已經(jīng)存在"})
      pass_word = request.POST.get("password", "")
      # 此處為上面重寫的authenticate方法
      user = authenticate(username=user_name, password=pass_word)
      if user is not None:   # 如果成功返回對象,失敗返回None
        login(request, user) # 調(diào)用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})

要實現(xiàn)form處理功能,在form.py中定義具體要求即可:

from django import forms
# 繼承forms.Form
class LoginForm(forms.Form):
  # 如果為空則報錯
  username = forms.CharField(required=True)
  # 同時也可以設(shè)定長度限制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>

總結(jié)

以上就是本文關(guān)于django實現(xiàn)用戶登陸功能詳解的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

Python通過Django實現(xiàn)用戶注冊和郵箱驗證功能代碼

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

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

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

相關(guān)文章

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

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

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

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

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

    python卸載numpy出現(xiàn)WinError:拒絕訪問的解決方案

    這篇文章主要介紹了python卸載numpy出現(xiàn)WinError:拒絕訪問的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python實現(xiàn)PS圖像明亮度調(diào)整效果示例

    Python實現(xiàn)PS圖像明亮度調(diào)整效果示例

    這篇文章主要介紹了Python實現(xiàn)PS圖像明亮度調(diào)整效果,結(jié)合實例形式分析了Python基于skimage模塊調(diào)整圖片明亮度的原理與具體操作技巧,需要的朋友可以參考下
    2018-01-01
  • Python實現(xiàn)定時自動關(guān)閉的tkinter窗口方法

    Python實現(xiàn)定時自動關(guān)閉的tkinter窗口方法

    今天小編就為大家分享一篇Python實現(xiàn)定時自動關(guān)閉的tkinter窗口方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 關(guān)于jupyter lab安裝及導入tensorflow找不到模塊的問題

    關(guān)于jupyter lab安裝及導入tensorflow找不到模塊的問題

    這篇文章主要介紹了關(guān)于jupyter lab安裝及導入tensorflow找不到模塊的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Django drf使用Django自帶的用戶系統(tǒng)的注冊功能

    Django drf使用Django自帶的用戶系統(tǒng)的注冊功能

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

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

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

    Python字典高級用法深入分析講解

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

    python 自動化偷懶的四個實用操作

    這篇文章主要介紹了python 自動化偷懶的四個實用操作,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-04-04

最新評論

梁平县| 洪洞县| 临城县| 延寿县| 义乌市| 贵德县| 西充县| 萨嘎县| 靖州| 英超| 芷江| 独山县| 疏附县| 怀柔区| 广灵县| 大宁县| 保德县| 收藏| 吉林省| 商河县| 南江县| 漯河市| 抚宁县| 忻城县| 土默特右旗| 玉树县| 内乡县| 沂水县| 盐池县| 赣州市| 中江县| 孟连| 平远县| 莱阳市| 富顺县| 延安市| 朝阳区| 唐山市| 台前县| 常德市| 竹溪县|