Django使用者驗證方法
阿新 • • 發佈:2019-01-06
前言
這部分主要是需要保證網站的一些敏感頁面不被普通遊客訪問到,需要一整套使用者系統
環境
- windows10
- pycharm2017.3.3 professional edition
- python3.6.4
- django2.0.2
方法
建立登陸頁面,與普通HTML頁面建立方法相同,比如下面這個最基本的登陸頁面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登陸</title> </head
login_check和{% csrf_token %}這兩部分後面會介紹
寫登入頁函式,以便於在其他頁面使用跳轉到登入頁。在views.py檔案下增加
def login(request): return render(request, "login.html", {"message": "請輸入使用者名稱和密碼!"})
別忘了新增到urls.py檔案
path('login/', views.login, name="login"),
跳轉方法
<a href="{% url 'login' %}"></a>
以上部分和建立一個普通頁面的方法基本相同,接下來重頭戲開始:使用者登陸與驗證。在views.py檔案內建立登陸驗證函式。若賬號密碼通過,則登陸並返回;否則留在登入頁並顯示 “登入名或密碼錯誤!”字樣
from django.contrib import auth from django.shortcuts import render, redirect def login_check(request): username = request.POST.get("username", "") password = request.POST.get("password", "") user = auth.authenticate(request, username=username, password=password) if user is not None: auth.login(request, user) return redirect("/dashboard/") else: return render(request, "login.html", {"message": "登入名或密碼錯誤!"})
同樣不要忘記將函式寫入urls.py檔案
path('login_check', views.login_check, name="login_check"),
未登入使用者強制跳轉,防止未登入使用者看到資料,在需要設定訪問限制的網頁加入以下函式,比如table,判斷使用者登陸狀況,若使用者已登入,則允許跳轉到table頁面,否則強制跳轉到登入頁面
def table(request): # 判斷登入情況,未登入強制跳轉 if request.user.is_authenticated: return render(request, "table.html") else: return render(request, "login.html", {"message": "請輸入使用者名稱和密碼!"})
備註
- CSRF(Cross-site request forgery)跨站請求偽造。Django為了防止CSRF攻擊有一些保護措施,因此我們在使用POST時會出現django csrf token missing or incorrect的錯誤,因此需要在POST表單中加入 {% csrf_token %},原理部分此時先不做深究,因為我也沒有研究這方面
- 關於render的一些問題,因為render本身自帶一個request引數,這個引數其實包含有很多資訊,其中就有使用者資訊,因此在使用render時,即便我們沒有向網頁傳遞任何引數,網頁依然可以訪問到使用者資訊,比如使用{{user}}就可以顯示使用者名稱,這就是request起到的作用