日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Django框架(十八)—— auth框架:用户登录、注册、认证

發(fā)布時間:2024/4/17 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django框架(十八)—— auth框架:用户登录、注册、认证 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

auth模塊

一、什么是author模塊

Auth模塊是Django自帶的用戶認(rèn)證模塊,可以實現(xiàn)包括用戶注冊、用戶登錄、用戶認(rèn)證、注銷、修改密碼等功能。默認(rèn)使用?auth_user?表來存儲用戶數(shù)據(jù)。

二、auth模塊的使用

1、創(chuàng)建超級用戶(create_superuser())

創(chuàng)建超級用戶就是在auth_user表中插入數(shù)據(jù),密碼是加密的,因此不能手動在數(shù)據(jù)庫中插入數(shù)據(jù)

(1)用命令創(chuàng)建

python3 manage.py createsuperuser

(2)用Python代碼創(chuàng)建

from django.contrib.auth.models import User user = User.objects.create_superuser(username='用戶名',password='密碼',email='郵箱',...)

2、驗證用戶(authenticate())

驗證用戶名以及密碼是否正確,一般需要username 、password兩個關(guān)鍵字參數(shù)。如果認(rèn)證成功(用戶名和密碼正確有效),便會返回一個 User 對象

from django.contrib import auth user = auth.authenticate(request, username=name, password=pwd)

相當(dāng)于是在數(shù)據(jù)庫中查詢:

user=models.User.objects.filter(name=name,pwd=pwd).first()

3、登錄用戶(login())

該函數(shù)接受一個HttpRequest對象,以及一個經(jīng)過認(rèn)證的User對象。

該函數(shù)實現(xiàn)一個用戶登錄的功能。它本質(zhì)上會在后端為該用戶生成相關(guān)session數(shù)據(jù)。

user = auth.authenticate(username=username, password=password) if user is not None: login(request, user) return HttpResponse('登錄成功')

4、登錄成功

一旦登錄成功,調(diào)了這個函數(shù)login(request,user),在以后的視圖類(函數(shù))中的request中就會有一個user對象,就是當(dāng)前已登錄的用戶對象。

5、注銷(logout())

該函數(shù)接受一個HttpRequest對象,無返回值。

當(dāng)調(diào)用該函數(shù)時,當(dāng)前請求的session信息會全部清除,即調(diào)用request.session.flush()。該用戶即使沒有登錄,使用該函數(shù)也不會報錯。

auth.logout(request)

6、登錄認(rèn)證裝飾器

快捷的給某個視圖添加登錄校驗。

若用戶沒有登錄,則會跳轉(zhuǎn)到django默認(rèn)的 登錄URL '/accounts/login/ ' 并傳遞當(dāng)前訪問url的絕對路徑 (登陸成功后,會重定向到該路徑)。

如果需要自定義登錄的URL,則需要在settings.py文件中通過LOGIN_URL進(jìn)行修改。

from django.contrib.auth.decorators import login_required@login_required(redirect_field_name='eee',login_url='/login/') # redirect_field_name:修改?后面的key值,一般不回去修改 # login_url:如果沒有登錄,跳轉(zhuǎn)到的頁面 # login_url局部配置 @login_required(login_url='/login/') # login_url全局配置 # 在setting文件中配置 LOGIN_URL='/login/' 直接使用 @login_required

7、創(chuàng)建普通用戶(create_user())

from django.contrib.auth.models import User user = User.objects.create_user(username='用戶名',password='密碼',email='郵箱',...)

8、校驗密碼(check_password())

# 先拿到用戶(可以是登錄用戶,可以現(xiàn)查) user = request.user # 或者 user = authenticate(username=username, password=password)pwd = request.POST.get('pwd') ret = user.check_password(pwd)

9、修改密碼(set_password())

注意:設(shè)置完一定要調(diào)用用戶對象的save方法!!!

修改密碼時,可以先校驗原密碼輸入是否正確,原密碼正確再開始修改密碼

user.set_password(pwd) user.save()

10、is_authenticated()

用來判斷當(dāng)前請求是否通過了認(rèn)證。如果通過驗證,是true,反之false

ret = request.user.is_authenticated()

11、刪除用戶

刪除用戶和用orm在表中刪除數(shù)據(jù)一樣

12、User對象的其他屬性

# 在網(wǎng)站上線以前,將is_active和is_staff設(shè)置為False is_active # 禁止登錄網(wǎng)站(用戶還存在,封號) is_staff # 是否對網(wǎng)站有管理權(quán)限(能不能登錄admin)request.user.is_active = False request.user.is_staff = False

三、擴(kuò)展默認(rèn)的auth_user表

1、方法一:定義一個表模型,跟User一對一關(guān)聯(lián)

from django.contrib.auth.models import Userclass UserDetail(models.Model): phone=models.CharField(max_length=32) # 一對一跟auth_user表做關(guān)聯(lián) # 如果是從外部引入的表模型,是不能加引號的 # 如果加引號,只是在當(dāng)前model找 user=models.OneToOneField(to=User)

2、方法二:定義一個表模型,繼承(AbstractUser)

from django.contrib.auth.models import AbstractUserclass UserInfo(AbstractUser): # username,password...都繼承了 phone=models.CharField(max_length=32) sex=models.BooleanField()

注意:

  • 一旦我們通過繼承來實現(xiàn)擴(kuò)展auth_user表,那么做數(shù)據(jù)庫遷移,以后就沒有auth_user這個表了,以后認(rèn)證組件用的表就是UserInfo。原來使用 auth_user 表模型的地方全部要用新的表模型——UserInfo

  • 引用Django自帶的User表,繼承使用時需要設(shè)置,在setting中對新表進(jìn)行配置:

AUTH_USER_MODEL ='app01.UserInfo' 博客內(nèi)容僅供參考,部分參考他人優(yōu)秀博文,僅供學(xué)習(xí)使用

轉(zhuǎn)載于:https://www.cnblogs.com/zhuzhiwei-2019/p/10779182.html

總結(jié)

以上是生活随笔為你收集整理的Django框架(十八)—— auth框架:用户登录、注册、认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。