python Django 使用者管理和許可權認證
阿新 • • 發佈:2020-07-31
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