Django自帶用戶認(rèn)證系統(tǒng)使用方法解析
Django自帶用戶認(rèn)證系統(tǒng),這個(gè)系統(tǒng)支持訪問(wèn)控制、注冊(cè)用戶、關(guān)聯(lián)創(chuàng)建者和內(nèi)容等;在開(kāi)發(fā)用戶認(rèn)證功能時(shí)的時(shí)候,可以使用django中的django.contrib.auth 中封?了注冊(cè)、認(rèn)證,登錄登出方法,可以直接使用;
相關(guān)表
在使用'python manage.py makemigrationss'和'python manage.py migrate'遷移完成數(shù)據(jù)庫(kù)之后
根據(jù)配置文件settings.py中的數(shù)據(jù)庫(kù)段生成的數(shù)據(jù)表中已經(jīng)包含了6張進(jìn)行認(rèn)證的數(shù)據(jù)表,分別是
auth_user auth_group auth_group_permissions auth_permission auth_user_groups auth_user_user_permissions自帶用戶認(rèn)證系統(tǒng),進(jìn)行用戶認(rèn)證的數(shù)據(jù)表為auth_user(用戶的數(shù)據(jù)保存在這個(gè)表里)
一、登陸功能:
authenticate():提供了用戶認(rèn)證,即驗(yàn)證用戶名以及密碼是否正確,一般需要username和password兩個(gè)關(guān)鍵字參數(shù)
如果通過(guò)認(rèn)證,authenticate()函數(shù)會(huì)返回一個(gè)User對(duì)象。當(dāng)我們?cè)噲D登陸一個(gè)從數(shù)據(jù)庫(kù)中直接取出來(lái)不經(jīng)過(guò)authenticate()的User對(duì)象時(shí)會(huì)報(bào)錯(cuò)。
1.登陸 auth.authenticate(username=name值, password=password值)
2.驗(yàn)證用戶名和密碼 auth.login(request, user) 這個(gè)函數(shù)使用Django的session框架給某個(gè)已認(rèn)證的用戶附加上session_id信息。
from django.shortcuts import render,redirect,HttpResponsefrom django.contrib.auth import authenticate,logindef auth_view(request): username=request.POST.GET('usernmae') # 獲取用戶名 password=request.POST.GET('password') # 獲取用戶的密碼 user=authenticate(username=username,password=password) # 驗(yàn)證用戶名和密碼,返回用戶對(duì)象 if user: # 如果用戶對(duì)象存在 login(request,user) # 用戶登陸 return redirect('/index/') else: return HttpResponse('用戶名或密碼錯(cuò)誤')
當(dāng)用戶登陸成功時(shí),會(huì)生成一個(gè)sessionid保存在cookies中,可以在數(shù)據(jù)庫(kù)django_session中查看,當(dāng)用戶訪問(wèn)其他頁(yè)面時(shí),可以通過(guò)sessionid判斷用戶是否已經(jīng)登陸。
二、注冊(cè)功能
django自帶User模型,導(dǎo)入方法:from django.contrib.auth.models import User
User是auth模塊中維護(hù)用戶信息的關(guān)系模式,在數(shù)據(jù)庫(kù)中被命名為auth_user,使用migrate會(huì)自動(dòng)生成.
user對(duì)象
User對(duì)象屬性:username,password為必填項(xiàng)
password用哈希算法保存到數(shù)據(jù)庫(kù)中
is_staff:判斷用戶是否擁有網(wǎng)站的管理權(quán)限 is_active:判斷是否允許用戶登陸,設(shè)置為“False”時(shí)可以不用刪除用戶來(lái)禁止用戶登陸用create_user輔助函數(shù)創(chuàng)建用戶
a、create_user創(chuàng)建用戶
create_user是django封裝好的用于創(chuàng)建用戶的方法(注意使用該方法注冊(cè)的用戶才能處理密碼明文存密文到數(shù)據(jù)庫(kù)的問(wèn)題),
創(chuàng)建方法:User.objects.create_user(username=name, password=password)此處的User是django中自帶的User模型from django.contrib.auth.models import User
def regist(request):name = request.POST.get(’name’)password = request.POST.get(’password’)User.objects.create_user(username=name, password=password)
三、退出登陸auth.logout(request)
這個(gè)函數(shù)接受一個(gè)HttpResponse對(duì)象,無(wú)返回值。當(dāng)調(diào)用該函數(shù)時(shí),當(dāng)前請(qǐng)求的session信息全部被清除。即使當(dāng)前用戶沒(méi)有登陸,調(diào)用該函數(shù)也不會(huì)報(bào)錯(cuò)。
def logout(request):if request.method == ’GET’:auth.logout(request)
四、登陸態(tài)驗(yàn)證
login_required() 若在訪問(wèn)某頁(yè)面時(shí),需要確認(rèn)用戶登陸成功才能訪問(wèn),可以在url中用login_required方法進(jìn)行驗(yàn)證,如果登陸成功就執(zhí)行,如果用戶未登陸,自動(dòng)跳轉(zhuǎn)登陸頁(yè)面。
a.login_requierd()裝飾器
配置跳轉(zhuǎn)路徑,,當(dāng)用戶未登陸訪問(wèn)其他頁(yè)面時(shí),自動(dòng)跳轉(zhuǎn)到指定的url
url(r’^index/’, login_required(views.index)),url(r’^addstu/’, login_required(views.addStu), name=’astu’),url(r’^stupage/’, login_required(views.stuPage)),
值得注意的是,一旦加上login_required方法,在用戶未登陸時(shí)訪問(wèn)頁(yè)面會(huì)出現(xiàn)如下的404錯(cuò)誤,所需還需要在setting.py進(jìn)行配置LOGIN_URL。
user對(duì)象的login_requierd()裝飾器
配置跳轉(zhuǎn)路徑,當(dāng)用戶未登陸訪問(wèn)其他頁(yè)面時(shí),自動(dòng)跳轉(zhuǎn)到登陸頁(yè)面
LOGIN_URL = ’/login/’
裝飾器也可以加到view方法前
from django.contrib.auth.decorators import login_required@login_requireddef views(request):pass
五、修改存儲(chǔ)自定義認(rèn)證中的User表
用戶也可以不使用自帶用戶認(rèn)證系統(tǒng)默認(rèn)的數(shù)據(jù)表auth_user,通過(guò)以下方式可以將用戶數(shù)據(jù)保存到自己定義的表中
from django.contrib.auth.models import Userclass UserProfile(models.Model): user = models.OneToOneField(User,on_delete=models.CASCADE) # django自帶用戶表User模塊和自定義的用戶關(guān)聯(lián) name = models.CharField(max_length=32) def __str__(self): return self.name
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 如何通過(guò)vscode運(yùn)行調(diào)試javascript代碼2. JAVA抽象類及接口使用方法解析3. 教你JS更簡(jiǎn)單的獲取表單中數(shù)據(jù)(formdata)4. 測(cè)試模式 - XSL教程 - 55. python b站視頻下載的五種版本6. JavaScript設(shè)計(jì)模式之策略模式實(shí)現(xiàn)原理詳解7. python如何寫(xiě)個(gè)俄羅斯方塊8. 《CSS3實(shí)戰(zhàn)》筆記--漸變?cè)O(shè)計(jì)(一)9. Python結(jié)合百度語(yǔ)音識(shí)別實(shí)現(xiàn)實(shí)時(shí)翻譯軟件的實(shí)現(xiàn)10. 本站用的rss輸出
