其實auth模塊本意上也是設置session
用戶認證是在你的django中執行了orm的數據庫的遷移和生成后就會在你的數據庫中自動生成一個用戶認證的表 這個表存儲的是你auth要提取的信息
首先views中導入下面語句
from django.contrib import auth
django.contrib.auth中提供了許多方法,這里主要介紹其中的三個:
其實你的用戶驗證的組件會調用你的django中user表 然后對這個表中你要先存數據
from django.contrib.auth.models import User #導入你的dgango中的user表 def adduser(request): User.objects.create_user(username = 'laoliu',password=123456) #運用create_user創建密文密碼 return redirect('/login/')
先導入數據庫 然后運用create_user進行創建 如果直接使用create創建的是明文密碼
如果你的表想用user內的字段 或者很多字段相同 你的表也可以繼承auth模塊你的models內繼承了user表
from django.contrib.auth.models import User 導入
但是你在models內設置好了后你要取settings內設置一段話告訴django你繼承了這個表中
settings:
AUTH_USER_MODEL="你的app名.UserInfo"
就是告訴你的django你的app中的models內這個表要繼承User表
AUTH_USER_MODEL="once.UserInfo" 告訴django你的once內的models內的UserInfo表要繼承
models:
from django.contrib.auth.models import AbstractUser from django.contrib.auth.models import User /這個和上面的繼承哪一個都可以User也是繼承了AbstaactUser表 class UserInfo(AbstractUser): """ 用戶信息 """ ....
views:
from django.contrib import auth #導入auth模塊
def login(request):
'''
登陸
:param request:
:return:
'''
if request.method == 'POST':
user = request.POST.get('user')
pwd = request.POST.get('pwd')
user = auth.authenticate(username =user,password=pwd) #自動給你的user表自動校驗
if user: #登陸成功
auth.login(request,user) #相當於設置session
return render(request,'login.html')
auth.authenticate:
自動判斷模塊 可以判斷你提交的信息是不是和user表中的內容是否相同
autho.login() 這一步相當於設置session的值
auth.login(request,user) 設置session的值user
設置完成后request.user就是全局的變量了直接可以隨意隨時隨地的使用request.user進行取值
is_authenticated 是來判斷你的設置的內容是否有值的
if not request.user.is_authenticated: #相當於如果沒有設置session的值 從request.user中沒有取到值
你的auth.login(request,'設置的內容')
然后你就可以根據你設置的內容全局去取
auth.login(request,user)
request.user就可以全局去取整個django都可以取到
注銷:
autho.logout(request)
注銷就相當於session.flush()
實現一個簡單的用戶登陸注銷:
url:

from django.contrib import admin from django.urls import path from one import views urlpatterns = [ path('admin/', admin.site.urls), path('login/',views.login,name = 'login'), path('index/' ,views.index, name='index' ), path('add/',views.adduser, name='add'), path('logout/',views.logout) ]
views:
from django.shortcuts import render,redirect,HttpResponse,reverse # Create your views here. from django.contrib import auth def login(request): if request.method == 'POST': user = request.POST.get('user') pwd = request.POST.get('pwd') # 上面獲取到用戶名之后會自動的用auth.authenticate來進行驗證 # user = auth.authenticate(uaername = user) user = auth.authenticate(username = user,password = pwd) if user: auth.login(request,user) #auth.login返回的是一個全局的變量 這一步就是一個設置session的值 return redirect('/index/') return render(request,'login.html') def index(request): if not request.user.is_authenticated: #相當於如果沒有設置session的值 從request.user中沒有取到值 return redirect(reverse('/login/')) return render(request,'index.html') def logout(request): auth.logout() #這一步就相當於直接session.flush() return redirect('/login/') from django.contrib.auth.models import User #導入你的dgango中的user表 def adduser(request): User.objects.create_user(username = 'laoliu',password=123456) #運用create_user創建密文密碼 return redirect('/login/')
前端:
login:登陸界面:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method = 'post'> {% csrf_token %} 用戶名 <input type="text" name="user"> 密碼: <input type="password" name="pwd"> <input type="submit" value="提交"> </form> </body> </html>
index界面:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h3>{{ request.user.username }}</h3> <a href="/logout/">注銷</a> </body> </html>