Django 實現登入功能

2021-09-26 15:56:50 字數 2795 閱讀 4360

使用者能註冊賬戶之後,接下來要讓使用者能夠登入。為此,要執行以下幾步:

❏ 定義乙個檢視,處理登入憑據

❏ 建立乙個模板,顯示登入表單

❏ 把登入檢視對映到乙個 url 上

❏ 在首頁新增登入鏈結

定義登入檢視

首先,開啟 rango 應用的 views.py 模組,定義乙個新檢視,名為 user_login() 。這個檢視負責處

理登入表單提交的資料,以及登入使用者。

def user_login(request):

# 如果是 http post 請求,嘗試提取相關資訊

if request.method == 'post':

# 獲取使用者在登入表單中輸入的使用者名稱和密碼

# 我們使用的是 request.post.get('')

# 而不是 request.post['']

# 這是因為對應的值不存在時,前者返回 none,

# 而後者丟擲 keyerror 異常

username = request.post.get('username')

password = request.post.get('password')

# 使用 django 提供的函式檢查 username/password 是否有效

# 如果有效,返回乙個 user 物件

user = authenticate(username=username, password=password)

# 如果得到了 user 物件,說明使用者輸入的憑據是對的

# 如果是 none(python 表示沒有值的方式),說明沒找到與憑據匹配的使用者

if user:

# 賬戶啟用了嗎?可能被禁了

if user.is_active:

# 登入有效且已啟用的賬戶

# 然後重定向到首頁

# 賬戶未啟用,禁止登入

# 提供的登入憑據有問題,不能登入

# 不是 http post 請求,顯示登入表單

# 極有可能是 http get 請求

else:

# 沒什麼上下文變數要傳給模板系統

# 因此傳入乙個空字典

return render(request, 'rango/login.html', {})

跟之前一樣,因為要處理不同的情況,這個檢視看起來十分複雜。從上述**可以看出,

user_login() 檢視既能渲染登入表單(包含 username 和 password 兩個字段),也能處理表單數

據。如果通過 http get 方法訪問這個檢視,顯示登入表單。然而,如果通過 http post 請求訪

問,則處理表單資料。

如果通過 post 請求傳送有效的表單資料,從中提取使用者名稱和密碼。然後使用 django 提供的

authenticate() 函式檢查使用者名稱和密碼是否匹配某個使用者賬戶。如果能找到這樣的使用者,返回一

個 user 物件,否則返回 none 。

返回 user 物件時,檢查賬戶是否啟用。如果是啟用的,呼叫 django 提供的 login() 函式,登入

使用者。然而,如果傳送的表達資料無效,例如使用者名稱和密碼沒有都填,登入表單顯示錯誤訊息,提示用

戶名或密碼無效。

你可能注意到了,這裡用了乙個新類,即 httpresponseredirect 。從名稱可以看出,

httpresponseredirect 例項生成的響應讓 web 瀏覽器重定向到引數指定的 url。注意,響應的

http 狀態碼是表示重定向的 302,而不是表示成功的 200。詳情參見 django 文件。

最後,使用 django 提供的 reverse() 函式獲取 rango 應用首頁的 url。 reverse() 函式在 rango

應用的 urls.py 模組中查詢名為 index 的 url 模式,解析出對應的 url。如果以後修改了 url 映

射,檢視**不受影響。

user_login() 檢視用到了 django 提供的多個函式和類,因此要匯入它們。下述 import 語句必須

放在 rango/views.py 檔案的頂部。

from django.core.urlresolvers import reverse建立登入頁面的模板

有了檢視之後,我們還要建立乙個模板,讓使用者輸入登入憑據。現在你應該知道要把模板放在

templates/rango/ 目錄中,不過這個模板的名稱我不告訴你,請你根據 user_login() 檢視的**確

定。在模板中寫入下述**:

login

Django連線MySQL實現登入功能

terminal中命令列 建立遷移檔案 python3 manage.py makemigrations stu執行遷移 python3 manage.py migrate資料庫中的表生成後,往表中插入資料。以方便後期登入匹配操作。did you install mysqlclient?修改 ini...

關於Django登入功能實現的幾種方案

優缺點 缺少css樣式,適合敏捷開發,對於前端樣式上需要花一些功夫 好處就是錯誤提示不需要我們刻意去實現 具體實現 urls.py from django.contrib.auth import views as auth views from account.forms import myauth...

Django開發登入功能實戰

django 如果是定義函式寫登入路由,需要判斷請求方法.為了簡化 現在可以使用django 中的view.目前是經常用到的,和flask中的restful 介面的寫法是差不多的.當然如果你框架還沒學或者python沒學好,建議可以先去小編的python交流.裙 一久武其而而流一思 數字的諧音 轉換...