1. 程式人生 > 實用技巧 >python Django 使用者管理和許可權認證

python Django 使用者管理和許可權認證

Auth認證系統

from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.models import User

# 使用者登陸
user = authenticate(username, password)
if user:
    if user.is_active:
    	login(request, user)
    else:
        print('賬號密碼錯誤')
else:
    print("登陸失敗")
# 登出
logout(request)
    
# 建立使用者
user = User.objects.create_user(username, password)
user.savae()
# 修改密碼
user = authenticate(username, password)
user.set_password(new_password)
user.save()

# 對密碼加密和檢查加密前的密碼和加密後的密碼是否相等
from django.contrib.auth.hashers import make_password, check_password
password = "123456"
code_password = make_password(password, None, "pbkdf2_sha256")
check_password(password, code_password)

擴充套件User模型

方式 描述
代理模型 在資料庫中無需建立新資料表。一般用於改變現有模型的行為方式,如增加新方法函式,並不影響現有資料庫結構。當不需要在資料庫中儲存額外資訊,但需要增加操作方法或更改模型查詢方式時使用
Profile擴充套件模型User 儲存的資訊與模型User相關,但是並不影響User原有的認證方法。定義信的模型MyUser,設定某個欄位與OneToOneField與User進行一對一關聯。
AbstractBaseUser 當User內建的方法不能滿足開發需求時,使用該方法對User重新設計。對User和資料庫架構影響很大。
AbstractUser 內建的User滿足開發需求,在不需要改變函式方法的情況下,增加User額外欄位,通過AbstractUser實現。
from django.contrib.auth.models import AbstractUser
from django.db import models

class MyUser(AbstractUser):
	tel = models.CharField('手機號', max_length=11)

修改settings.py檔案

AUTH_USER_MODEL = 'user.MyUser'

在admin.py檔案中新增資料物件

from django.contrib import admin
from user.models import MyUser
from djangp.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy as _

@admin.register(MyUser)
class MyUserAdmin(UserAdmin):
    # 重寫UserAdmin的fieldsets,新增其他屬性的錄入
    fieldsets[1] = (_('Personal info'), {'fields': ('first_name', 'last_name', 'tel')})    

設定使用者許可權

# 檢查是否擁有許可權
user.has_perm('index.add_product')

# 檢視全部許可權
user.user_permissions.values()

# 新增許可權
permission = Permission.objects.get(codename="add_product")
user.user_permissions.add(permission)

# 刪除許可權
user.user_permissions.remover(permission)

# 自定義Model的許可權

class Product(models.Model):
    id = models.AutoField('序號', primary_key=True)

# 檢查使用者許可權
from django.shortcuts import render
from django.contrib.auth.decorators import login_required, permission_required

@login_required(login_url="/user/login.html")
@permission_required(perm='index.visit', login_url="/user/login.html")
def index(request):
	return render(request, "index.html")

設定使用者組

from django.contrib.auth.models import Group