前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django用户认证系统组与权限(一)

Django用户认证系统组与权限(一)

作者头像
Autooooooo
发布2020-11-09 11:26:57
7020
发布2020-11-09 11:26:57
举报
文章被收录于专栏:CoxhuangCoxhuangCoxhuang

Django权限系统

#1 用户

User

from django.contrib.auth.models import User
...
class UserProfile(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    ...

创建

User.objects.create_user(username="cox", password="cox123456")

AbstractUser

from django.contrib.auth.models import AbstractUser
...
class UserProfile(AbstractUser):
    age = models.CharField(max_length=16)
    ...

settings.py

AUTH_USER_MODEL = 'app名.UserProfile'

#2 认证用户

系统自带认证

from django.contrib.auth import authenticate
...
user = authenticate(username=username, password=password)
# 认证用户的密码是否有效, 若有效则返回代表该用户的user对象, 若无效则返回None
# 需要注意的是:该方法不检查 is_active 标志位

自定义认证

settings.py

AUTHENTICATION_BACKENDS = (
    'apps.User.utils.mycustombackend.custombackend.CustomBackend',
)

apps.User.utils.mycustombackend.custombackend.CustomBackend

from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from User import models


class CustomBackend(ModelBackend):
    """
    自定义用户验证规则,输入用户名/邮箱均可
    """
    def authenticate(self, username=None, password=None, **kwargs):
        try:
            user = models.UserProfile.objects.get(Q(username=username)|Q(email=username))
            if user.check_password(password):
                return user
        except Exception as e:
            print("用户登录验证异常except:", e)
            return None

#3 修改用户密码

user.set_password(new_password)

#4 登录

from django.contrib.auth import login
...
login(request, user)
# 在auth/__init__.py中可以看到login的源代码

#5 退出登录

from django.contrib.auth import logout
...
logout(request)

#6 Group

from django.contrib.auth.models import Group

User对象中有一个名为groups的多对多字段, 多对多关系由auth_user_groups数据表维护。Group对象可以通过user_set反向查询用户组中的用户

添加/删除 用户组

group = Group.objects.create(name=group_name) # 添加权限组
group.save()
---
group = Group.objects.get(name=group_name) # 删除权限组
group.delete() 

用户加入用户组

user.groups.add(group)
或者
group.user_set.add(user)

用户退出用户组

user.groups.remove(group)
或者
group.user_set.remove(user)

用户退出所有用户组

user.groups.clear()

用户组中所有用户退出组

group.user_set.clear()

#7 Permission

检查用户权限

user.has_perm方法用于检查用户是否拥有操作某个模型的权限

user.has_perm('blog.add_article')
# 若拥有权限则返回True

用户

添加权限
user.user_permissions.add(permission)
删除权限
user.user_permissions.delete(permission)
清空权限
user.user_permissions.clear()

权限组

添加权限
group.permissions.add(permission)
删除权限
group.permissions.delete(permission)
清空权限
group.permissions.clear()

#8 自定义权限

class Discussion(models.Model):
  ...
  class Meta:
      permissions = (
          ("create_discussion", "Can create a discussion"),
          ("reply_discussion", "Can reply discussion"),
      )

判断用户是否拥有自定义权限:

user.has_perm('app名.create_discussion')
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Django权限系统
  • #1 用户
    • User
      • AbstractUser
      • #2 认证用户
        • 系统自带认证
          • 自定义认证
          • #3 修改用户密码
          • #4 登录
          • #5 退出登录
          • #6 Group
            • 添加/删除 用户组
              • 用户加入用户组
                • 用户退出用户组
                  • 用户退出所有用户组
                    • 用户组中所有用户退出组
                    • #7 Permission
                      • 检查用户权限
                        • 用户
                          • 添加权限
                          • 删除权限
                          • 清空权限
                        • 权限组
                          • 添加权限
                          • 删除权限
                          • 清空权限
                      • #8 自定义权限
                      相关产品与服务
                      访问管理
                      访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档