当前位置: 首页 > news >正文

【Dv3Admin】系统视图用户管理API文件解析

用户管理是后台系统的核心模块,直接关联系统安全与数据规范。通过完善的用户接口设计,可实现对账户的全生命周期控制,覆盖注册、认证、权限分配等各关键环节,确保平台运行稳定高效。

围绕 dvadmin/system/views/user.py 模块展开解析,剖析其如何基于 Django 和 DRF 构建标准化用户接口,支持用户信息管理、密码维护、头像上传与角色分配,强调设计思路与实际应用场景。

文章目录

  • user.py
  • 项目源码解析
  • 应用案例
  • 总结

user.py

本系统基于 Django 框架和 DRF 组件搭建后台管理平台,支持用户管理、权限分配、数据隔离等功能。dvadmin/system/views/user.py 模块承担用户管理相关接口逻辑,包括用户信息的增删改查、密码重置、角色分配等操作。模块采用标准 ViewSet 结构,并结合自定义序列化器和扩展方法,适配多种用户管理场景,提升后台系统的灵活性与易用性。

项目特点描述
技术栈Django + Django Rest Framework
功能定位提供后台用户管理、权限分配、账户状态维护接口
设计原则高内聚、可扩展、支持多种用户操作
权限体系接入系统权限组件进行精细化控制

dvadmin/system/views/user.py 文件负责处理用户管理的后端逻辑,继承自自定义基础类 CustomModelViewSet,自动具备增删改查等标准操作能力。同时扩展了重置密码、修改当前用户信息、用户自主修改密码、用户头像上传、设置用户角色等接口方法。该模块对接 Users 模型和对应的序列化器 UserSerializer,保障数据读写的一致性,并通过相关业务逻辑,辅助系统完成用户生命周期内各项操作管理。

模块职责说明
用户增删改查标准接口支持用户列表查询、新增用户、更新用户、删除用户
密码管理支持重置密码、用户修改自身密码接口
头像上传支持用户上传头像文件更新个人资料
用户信息管理查询和修改当前登录用户的基本信息
角色分配后台可为用户分配角色,实现权限隔离管理

在后台管理系统中,需要高效地管理用户账户、分配权限、控制登录信息、维护用户状态时,通过 dvadmin/system/views/user.py 提供的接口,可以实现对用户生命周期的全流程管理。例如在员工入职流程中新建用户并赋予初始角色;在用户请求修改密码时提供安全的密码更新接口;在系统后台上传头像美化用户资料;在检测异常登录时强制重置用户密码以保障系统安全。

使用场景说明
员工入职新建用户后台新增员工账号并分配基础权限
密码遗忘重置操作通过后台快速重置用户登录密码
用户主动修改密码提供安全接口支持用户在登录状态下修改自己的密码
维护个人资料与头像上传用户自主上传头像、编辑个人资料信息
调整用户角色权限后台管理员调整用户的角色分配以变更权限范围

项目源码解析

用户基础信息序列化器

用于用户列表和基本信息接口输出,动态加载用户部门层级、角色列表,支持外部可配置扩展。与 UsersDeptRole 模型协作,通过自定义方法增加数据丰富度。

class UserSerializer(CustomModelSerializer):dept_name = serializers.CharField(source='dept.name', read_only=True)role_info = DynamicSerializerMethodField()dept_name_all = serializers.SerializerMethodField()class Meta:model = Usersread_only_fields = ["id"]exclude = ["password"]extra_kwargs = {"post": {"required": False}, "mobile": {"required": False}}

用户创建序列化器

管理用户新增逻辑,包括用户名唯一性验证和密码加密存储。初次保存后同步设置部门归属与岗位绑定,确保数据完整性。

class UserCreateSerializer(CustomModelSerializer):username = serializers.CharField(validators=[CustomUniqueValidator(queryset=Users.objects.all(), message="账号必须唯一")])def validate_password(self, value):md5 = hashlib.md5()md5.update(value.encode('utf-8'))md5_password = md5.hexdigest()return make_password(md5_password)def save(self, **kwargs):data = super().save(**kwargs)data.dept_belong_id = data.dept_iddata.save()data.post.set(self.initial_data.get("post", []))return dataclass Meta:model = Usersfields = "__all__"read_only_fields = ["id"]

用户修改序列化器

管理用户编辑逻辑,新增激活状态变更时重置错误登录次数机制,避免因锁定账号导致无法登录问题。

class UserUpdateSerializer(CustomModelSerializer):username = serializers.CharField(validators=[CustomUniqueValidator(queryset=Users.objects.all(), message="账号必须唯一")])def validate_is_active(self, value):if value:self.initial_data["login_error_count"] = 0return valuedef save(self, **kwargs):data = super().save(**kwargs)data.dept_belong_id = data.dept_iddata.save()data.post.set(self.initial_data.get("post", []))return dataclass Meta:model = Usersfields = "__all__"read_only_fields = ["id", "password"]

当前用户资料修改序列化器

允许当前登录用户更新个人资料信息如手机、邮箱、头像,保证手机号唯一性校验。

class UserInfoUpdateSerializer(CustomModelSerializer):mobile = serializers.CharField(validators=[CustomUniqueValidator(queryset=Users.objects.all(), message="手机号必须唯一")])class Meta:model = Usersfields = ['email', 'mobile', 'avatar', 'name', 'gender']

用户数据导出序列化器

为导出接口定制格式化字段,如部门负责人、用户状态转换成中文文本,提升数据报表可读性。

class ExportUserProfileSerializer(CustomModelSerializer):last_login = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)is_active = serializers.SerializerMethodField(read_only=True)dept_name = serializers.CharField(source="dept.name", default="")dept_owner = serializers.CharField(source="dept.owner", default="")gender = serializers.CharField(source="get_gender_display", read_only=True)class Meta:model = Usersfields = ("username", "name", "email", "mobile", "gender", "is_active", "last_login", "dept_name", "dept_owner")

用户数据导入序列化器

用于批量导入用户数据,支持初始密码设定为默认值或指定值,并加密存储。

class UserProfileImportSerializer(CustomModelSerializer):def save(self, **kwargs):data = super().save(**kwargs)password = hashlib.new("md5", str(self.initial_data.get("password", "admin123456")).encode("UTF-8")).hexdigest()data.set_password(password)data.save()return dataclass Meta:model = Usersexclude = ("post", "user_permissions", "groups", "is_superuser", "date_joined")

用户管理接口类

集中管理用户查询、新增、编辑、导入导出、密码管理等功能,灵活定义字段筛选与搜索,支持扩展自定义动作。

class UserViewSet(CustomModelViewSet):queryset = Users.objects.exclude(is_superuser=1).all()serializer_class = UserSerializercreate_serializer_class = UserCreateSerializerupdate_serializer_class = UserUpdateSerializerexport_serializer_class = ExportUserProfileSerializerimport_serializer_class = UserProfileImportSerializerfilter_fields = ["name", "username", "gender", "is_active", "dept", "user_type"]search_fields = ["username", "name", "dept__name", "role__name"]

返回当前登录用户的详细信息,包括基本资料、所属部门、角色列表,支持租户信息扩展。

@action(methods=["GET"], detail=False, permission_classes=[IsAuthenticated])
def user_info(self, request):...

允许登录用户自行更新个人资料,不依赖管理员操作,提升自主维护体验。

@action(methods=["PUT"], detail=False, permission_classes=[IsAuthenticated])
def update_user_info(self, request):...

校验旧密码后修改当前账户密码,增加旧密码多次加密兼容性处理,保证密码更新安全。

@action(methods=["PUT"], detail=False, permission_classes=[IsAuthenticated])
def change_password(self, request, *args, **kwargs):...

针对首次登录用户强制要求修改初始密码,提升系统安全性。

@action(methods=["post"], detail=False, permission_classes=[IsAuthenticated])
def login_change_password(self, request, *args, **kwargs):...

管理员操作,重置指定用户密码为系统配置的默认值,仅允许超级管理员执行。

@action(methods=["PUT"], detail=True, permission_classes=[IsAuthenticated])
def reset_to_default_password(self, request, pk):...

超级管理员可以手动指定新密码重置目标账户,不依赖默认密码。

@action(methods=["PUT"], detail=True)
def reset_password(self, request, pk):...

根据部门筛选、搜索条件动态生成查询条件,支持查询指定部门及其子部门下所有用户,提高数据检索效率。

def list(self, request, *args, **kwargs):...

应用案例

用户管理模块在后台系统中的落地应用

在后台管理系统中,用户管理是最基础且最核心的模块,直接关联系统安全性与数据完整性。通过 dvadmin/system/views/user.py 模块,系统实现了对用户的全生命周期管理,包括用户创建、编辑、删除、密码管理、角色分配等操作。模块使用 Django 和 DRF 提供的标准化接口管理用户信息,结合自定义序列化器处理不同场景下的数据输入输出,确保了用户数据的统一性和一致性。

功能点内容描述
场景需求实现用户全生命周期管理,确保系统安全性与数据完整性,包括用户创建、编辑、删除、密码管理、角色分配等操作。
核心模块dvadmin/system/views/user.py:实现用户管理相关功能。
支持功能- 用户创建:通过 UserCreateSerializer 序列化器校验用户名唯一性并加密存储密码。
- 用户编辑:支持用户信息的动态更新,包括用户名、联系方式等基础信息。
- 用户删除:提供安全的删除接口,确保数据一致性与权限管控。
- 密码管理:提供用户密码修改接口,确保敏感数据的安全性与操作的合法性。
- 角色分配:支持快速为用户分配角色与设置部门,保证数据完整性与业务逻辑合理性。
实现机制- Django 与 DRF:使用 Django 和 Django REST Framework 提供的标准化接口管理用户信息。
- 自定义序列化器:处理不同场景下的数据输入输出,确保数据统一性和一致性。
安全性设计- 唯一性验证:用户创建时对用户名进行唯一性校验。
- 密码加密存储:通过加密算法存储用户密码,提升数据安全性。
- 安全接口:如密码修改接口,避免敏感数据暴露,确保系统安全。
应用场景- 用户管理:系统管理员通过后台管理页面添加、编辑或删除用户信息。
- 权限配置:为用户分配角色与部门,确保权限合理性。
优势- 提供标准化接口,提升开发与运维效率。
- 确保用户数据安全性与系统的稳定性。
扩展能力- 支持与其他模块(如角色权限管理、日志记录)集成,构建完整的用户权限管理体系。

例如,管理员在添加新用户时,通过 UserCreateSerializer 序列化器对用户名进行唯一性验证,并对密码进行加密存储。系统管理员可以快速为用户分配角色、设置部门,确保数据的完整性和业务逻辑的合理性。在用户请求修改密码时,提供了安全的修改接口,避免了敏感数据的暴露,确保了系统的安全性。

具体的接口操作及业务应用

在员工入职过程中,管理员通过后台快速为新员工创建用户账号,并通过 API 分配角色与权限。用户创建接口如下所示:

POST /api/system/user/{"username": "newuser","password": "123456","email": "newuser@example.com","role": ["Admin", "Manager"],"dept": "Sales"
}

创建成功后,用户将自动拥有销售部门权限,并加入管理员和经理角色,系统通过以下代码完成角色分配与保存:

data.post.set(self.initial_data.get("post", []))

在用户忘记密码的情况下,管理员可通过重置密码接口快速恢复访问:

PUT /api/system/user/reset_to_default_password/123/{"username": "newuser","password": "admin123456"
}

用户可以通过以下接口在登录状态下修改自己的密码,确保账户安全:

PUT /api/system/user/change_password/{"old_password": "123456","new_password": "newpassword123"
}

对于用户资料更新,用户可以通过 update_user_info 接口修改个人信息,包括头像、邮箱、手机号等:

PUT /api/system/user/update_user_info/{"email": "newuser_updated@example.com","avatar": "path_to_avatar_image"
}

此外,系统提供用户数据的批量导出和导入接口,方便系统管理员快速导入大量用户数据或导出为报表进行分析。ExportUserProfileSerializer 负责用户导出的字段格式化,确保数据可读性与一致性:

GET /api/system/user/export/

用户数据安全与权限控制

该模块结合 Django 的权限控制系统,对每个用户的访问权限进行精细化管理。只有授权的管理员可以修改其他用户的敏感数据,如重置密码、分配角色等操作。通过 IsAuthenticated 权限类,确保接口安全性,只有登录用户才能进行操作。

例如,系统通过权限校验,强制要求用户修改初始密码,提升系统安全性。首次登录时,用户需通过以下接口修改密码:

POST /api/system/user/login_change_password/{"new_password": "newpassword123"
}

通过这种方式,系统有效地控制了用户账户的操作权限,确保了账号安全,避免了恶意登录和数据泄露的风险。

以上代码示例展示了 dvadmin/system/views/user.py 模块如何在实际业务中应用,涵盖用户信息管理、密码保护、角色分配等多个业务场景,保证了后台用户管理系统的高效、灵活与安全。

总结

模块以自定义 ViewSet 为基础,统一管理用户的增删改查与扩展接口,提升维护效率。序列化器按操作类型细分,分别处理新建、更新、导出导入等不同业务场景,保持数据一致性。接口中强化了权限校验与异常控制,兼顾灵活性与安全性,同时预留扩展空间以适配多租户环境和复杂权限体系。

接口数量较多,部分逻辑分散,后期扩展易引发维护负担。密码处理方式冗余,兼容性与安全性权衡不足。用户列表检索逻辑可进一步优化以提升大数据量场景下的性能。如果重写,建议引入服务层分离业务逻辑,统一密码策略配置,并对批量操作增加异步支持。

http://www.xdnf.cn/news/763057.html

相关文章:

  • Redis 架构设计
  • Kali Linux从入门到实战:系统详解与工具指南
  • Fréchet Inception Distance(FID)
  • ubuntu系统更换镜像源
  • [GESP202412 五级] 奇妙数字
  • java 多线程中的volatile关键字作用
  • 【JavaScript-Day 28】告别繁琐循环:`forEach`, `map`, `filter` 数组遍历三剑客详解
  • c++之循环
  • java CountDownLatch‌
  • 题海拾贝:压缩字符串
  • 详解鸿蒙开发如何上传三方库到ohpm仓库
  • 【Dv3Admin】系统视图系统配置API文件解析
  • 017搜索之深度优先DFS——算法备赛
  • java ExecutorService线程池使用(ExecutorService/Completable异步+ExecutorService线程池)
  • Office安装包2024版
  • ck-editor5的研究 (4):初步使用 CKEditor5 的插件功能
  • 72.编辑用户消息功能之前端实现
  • PCB制作入门
  • 开始通信之旅-----话题通信
  • 关于 java:4. 异常处理与调试
  • C#数字图像处理(二)
  • IO流1——体系介绍和字节输出流
  • 如何用利用deepseek的API能力来搭建属于自己的智能体-优雅草卓伊凡
  • 【AI面试秘籍】| 第25期:RAG的关键痛点及解决方案深度解析
  • OpenGL、GLUT、freeGLUT 与 GLFW 的区别
  • 【渲染】拆解《三国:谋定天下》场景渲染技术
  • C++实现汉诺塔游戏自动完成
  • [AD] CrownJewel-1 Logon 4799+vss-ShadowCopy+NTDS.dit/SYSTEM+$MFT
  • QT中子线程触发主线程弹窗并阻塞等待用户响应
  • Ⅰ.计算机二级选择题(C语言概述)