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