1. 程式人生 > >$Django AUTH組件

$Django AUTH組件

手機號 per 數據 添加 admin one 引號 手動 erl

-auth組件
-auth是什麽?
-django內置的用戶認證系統,可以快速的實現,登錄,註銷,修改密碼....
-怎麽用?
-(1)先創建超級用戶:
-python3 manage.py createsuperuser
-輸入用戶名,郵箱(可以不輸入),密碼,敲回車,這樣就創建出一個超級用戶
-也就是在auth_user這個表中插入了一條數據(密碼是加密的,所以我不能手動插入)
-(2)驗證用戶【是否存在】:
-from django.contrib import auth
-user = auth.authenticate(request, username=name, password=pwd)


-相當於在查詢:user=models.User.objects.filter(name=name,pwd=pwd).first()
-如果校驗通過,會返回一個user對象,通過判斷user對象,校驗是否驗證成功
-(3)登錄【賬號密碼對了寫session】
-auth.login(request,user)
-其實就是在session中寫了一條數據
-(4)一旦登錄成功,調了這個函數login(request,user)
-以後再視圖類,函數中的request對象中,就有一個user對象,就是當前登錄的用戶對象
-如果沒有登錄,request.user=AnonymousUser,匿名用戶

-(5)註銷
-auth.logout(request)
-內部:調用了request.session.flush(),刪除了登錄狀態
-(6)登錄認證裝飾器
-from django.contrib.auth.decorators import login_required
-@login_required(redirect_field_name=‘eee‘,login_url=‘/login/‘)
-redirect_field_name:修改?後面的key值,
-login_url:如果沒有登錄,跳轉到的頁面
-可以局部配置
-可以全局配置(在setting中)
# 全局的配置,如果沒有登錄,跳到這個路由
LOGIN_URL=‘/login/‘

-(7)創建用戶:
-from django.contrib.auth.models import User #auth_user表
- 創建超級用戶和普通用戶
# 不能用create
# user=User.objects.create(username=name,password=pwd)
# 創建超級用戶
# user=User.objects.create_superuser(username=name,password=pwd)
# 創建普通用戶
user=User.objects.create_user(username=name,password=pwd)
-(8)校驗密碼
-request.user.check_password(pwd)
-先拿到用戶(可以是登錄用戶,可以現查)
-(9)修改密碼:
-user.set_password(pwd)
-user.save()
-註意:一定要調用save(),否則是不保存的
-(10)if request.user.is_authenticated()【判斷session】登陸狀態
-如果通過驗證,是true反之false
-(11)其他方法(了解):
-is_active:禁止登錄網站(用戶還存在,封號)
-is_staff:是否對網站有管理權限(能不能登錄admin)

-(12)刪除用戶
-orm刪除
如果想在認證組件上添加手機號等其他字段:如何處理
-(1) 定義一個表模型,跟User一對一管理
class UserDetail(models.Model):
phone=models.CharField(max_length=32)
# 一對一跟auth_user表做關聯
# 如果是從外部引入的表模型,是不能加引號的
# 如果加引號,只是在當前model找
user=models.OneToOneField(to=User)
-(2)定義一個表模型,繼承(AbstractUser)
-from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
# username,password...都有
phone=models.CharField(max_length=32)
sex=models.BooleanField()
-在setting中配置:
AUTH_USER_MODEL =‘app01.UserInfo‘
-做數據庫遷移,以後就沒有auth_user這個表了,以後認證組件用的表就是UserInfo
-原來auth中的其他操作:
-authentication
-login
-logout
-set_password
....
---一樣用,完全一樣
-不一樣的地方:
如果之前用到大寫User這個表模型的地方,都換成UserInfo

$Django AUTH組件