本篇內容
介紹Django框架提供的auth 認證系統
方法:
方法名 | 備注 |
create_user | 創建用戶 |
authenticate | 登錄驗證 |
login | 記錄登錄狀態 |
logout | 退出用戶登錄 |
is_authenticated | 判斷用戶是否登錄 |
login_required裝飾器 | 進行登錄判斷 |
?
引入模塊
from django.contrib import auth
登錄認證
user = auth.authenticate(username=username, password=pwd)if user is not None:# 將登錄的用戶封裝到request.user# 在中間件中 process_request 中每次都這樣子處理# id = request.session.get("user_id") 得到id# user = auth.User.objects.get(id=id)# request.user = userauth.login(request, user=user)return redirect("/index/")
驗證通過則返回user,沒有則返回None,在?login?函數中將認證通過的用戶賦值給?request.user?屬性,以及內部的?session?操作。?封裝request.user = user ? ? ??
認證裝飾器??login_required?
from django.contrib.auth.decorators import login_required@login_required def index(request):print(request.user.username)return render(request, "index.html")
需要配置登錄視圖的url,所以需要在?settings?文件中配置如下:
# 如果沒有登錄 默認跳轉的url LOGIN_URL = "/login/"
創建用戶
1.普通用戶
from django.contrib.auth.models import User# 加密的user = User.objects.create_user(username="tanglaoer2", password="tanglaoer")user.set_password("tang")user.save()
2.超級用戶
user = User.objects.create_superuser(username="tanglaoer2", password="tanglaoer") user.set_password("tang") user.save()
注銷
auth.logout(request)
內部相當于?request.session.flush()?
擴展自帶的auth_user表
1.新建一個表, 一對一關聯上面的auth_user表
或者新建一個表,繼承的方式
from django.contrib.auth.models import AbstractUserclass UserInfo(AbstractUser):phone = models.CharField(max_length=11)addr = models.CharField(max_length=128)
相當于對默認的?auth_user?表做了擴展, 并且代替?auth_user?,還需要在配置文件?settings?中進行如下配置:
# 如果使用繼承的方式 繼承auth的models,要在settings.py里面配置 默認用戶認證時使用的哪張表 AUTH_USER_MODEL = "app.UserInfo"
auth認證還是使用?auth?? 只是創建用戶的時候改為 用?UserInfo?