Django 【認證系統】auth
阿新 • • 發佈:2019-01-05
引入模組
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 = user auth.login(request, user=user) return redirect("/index/")
驗證通過則返回user,沒有則返回None,在 login 函式中將認證通過的使用者賦值給 request.user 屬性,以及內部的 session 操作。 封裝request.user = user
認證裝飾器 login_required
fromdjango.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 importUser # 加密的 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 AbstractUser class 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