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
原文地址:https://www.cnblogs.com/iFanLiwei/p/13408712.html