1. 程式人生 > >Django 【認證系統】auth

Django 【認證系統】auth

引入模組

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 

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 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