一、user表结构更改
前提:必须注意,必须是第一次新建user表才行,也就是说第一次使用python3 manage.py makemigrations
命令才行,因此目标数据库也是空的
setting中设置:
AUTH_USER_MODEL = 'hello.dingtalk' #项目名.model名
解释:继承AbstractUser类可以增加user表字段,
last_login = None
可以不继承其默认属性,上面的操作可以影响默认django自带的方法(因为有些字段变更)from django.contrib.auth.models import AbstractUser # Create your models here. class dingtalk(AbstractUser): # username email is_active date_joined userid = models.CharField(unique=True,max_length=30) unionid= models.CharField(unique=True,max_length=50) # 企业员工唯一标识 mobile=models.CharField(max_length=30) # 应用开启电话的个人权限时,钉钉才会返回 job_number = models.CharField(max_length=30) # 工号 title=models.CharField(max_length=20) # 职位 email=models.EmailField() # 应用开启邮箱的个人权限时,钉钉才会返回 senior=models.BooleanField() # 企业高管 admin=models.BooleanField() # 企业管理员 boss=models.BooleanField() # 企业老板 last_login = None is_superuser=None is_staff=None password = None first_name=None last_name=None
二、Auth用户系统
1.注册用户
from django.contrib.auth.models import User
User.objects.create_user(email='1.@qq.com',username='luck',password='123456')
2.用户登录
参数:
- authenticate:来判断用户账号密码是否正确,正确返回该用户对象可供操作
- login:登录成功开始分发session
重点:是否记住-即cookie的保存时间,设置SESSION_COOKIE_AGE = 86400# 秒 这里写的是一天默认是二周
,views里面设置request.session.set_expiry(0) # 关闭浏览器就消失cookie
from django.contrib.auth import authenticate, login
def loginView(request):
if request.method == 'POST':
user = request.POST['user']
password= request.POST['password']
# 验证用户账号和密码
auth = authenticate(username=user,password=password)
# 判断账号密码是否正确
if auth:
# 验证用户是否注销,没有注销可继续使用
if auth.is_active:
login(request,auth)
request.session.set_expiry(0) # 关闭浏览器cookie消失,登录凭证消失
return HttpResponse("login ok")
return HttpResponse('passwd fail')
else:
return render(request,'testWeb/login.html')
3.退出登录
from django.contrib.auth import logout
def logoutView(request):
logout(request)
return HttpResponse("ok")
4.修改密码
from django.contrib.auth.models import User
User.objects.get(username='jack').set_password('gh1023803643')
三、Auth管理员权限系统
解释:当完整安装了admin和auth的app时,数据库里面会产生关键的七个表,其中有4个是基础表,3个是多对多表
基础表:
auth_user
:用户表auth_group
:分组表(可以给组赋予权力,这样该组下面的所以人都拥有该组的权力)auth_permission
:权限表(里面写着权限,具体表现为一张表里面有4个权限,分别是增删改查,该表内容多少=表数*4)django_content_type
:类型表(里面写着app对应的model对象)
多对多表:
auth_group_permissions
:组和权限互相关联auth_user_groups
:用户和组互相关联auth_user_user_permissions
:用户和权限互相关联
1.组管理
from django.contrib.auth.models import Group
from django.contrib.auth.models import User
# 创建组
Group.objects.create(name='name')
# 用户进组
group=Group.objects.get(name='name')
user = User.objects.get(id=2)
user.groups.add(group)
# 用户退组
group=Group.objects.get(name='name')
user = User.objects.get(id=2)
user.groups.remove(group)
#用户退出所有用户组
user = User.objects.get(id=2)
user.groups.clear()
#清空组中用户
group=Group.objects.get(name='name')
group.user_set.clear()
2.权限管理
2.1 用户权限增删改
# 添加权限
user = User.objects.get(id=2) # 获取user用户
model = ContentType.objects.get(app_label='testWeb',model='father') # 从django_content_type表里面获取指定app和其模型所对应的id(因为django_permission的外键关联此表)
permission = Permission.objects.filter(content_type_id=model.id)[0] # 通过外键获取,这个外键会有4个相同的内容,分别为增加、修改、删除和查看
user.user_permissions.add(permission.id) # 通过多对多表给用户添加上权限,这个填的是外键字段(id)
# 删除
user.user_permissions.remove(permission.id)
# 清空权限
user.user_permissions.clear()
2.2 组权限增删改
# 添加权限
group = Group.objects.get(id=2)
# 中间步骤和前面一样
group.permissions.add(permission.id)
# 删除
group.permissions.remove(permission.id)
# 清空权限
group.permissions.clear()
2.3 用户与组权限
# 获取用户所属组的权限
user.get_group_permissions()
# 获取用户本身的权限
user.get_user_permissions()
# 获取用户本身和所在组的权限
user.get_all_permissions()
2.4权限检查
user = User.objects.get(id=2)
user.has_perm('testWeb.add_son') #testWeb是app名字,add是权限名字,son是模型名小写
user.has_perms([]) # 与上面不同就是传入一个列表
user.has_module_perms("app") # 查看是否对app有全部权限
# 有权限返回True
# 没有权限返回False
2.5自定义权限
版权声明:本文为weixin_46765649原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。