Files
jiangmingzhao-daily-report/backend/accounts/serializers.py
jiangmingzhao 9b9ee273fc 初始提交:企业级日报系统完整代码
功能特性:
-  JWT用户认证系统
-  日报CRUD管理
-  三级权限控制
-  多维度搜索过滤
-  统计分析功能
-  评论互动系统
-  响应式Cool Admin界面
-  暗色主题支持

 技术栈:
- 后端:Django 4.2.7 + DRF + SimpleJWT
- 前端:Vue 3 + Element Plus + Pinia
- 数据库:SQLite/PostgreSQL
- 部署:Docker + Nginx

 包含内容:
- 完整的后端API代码
- 现代化前端界面
- 数据库迁移文件
- 部署脚本和文档
- 演示页面和测试工具
2025-09-13 14:35:15 +08:00

75 lines
2.7 KiB
Python

from rest_framework import serializers
from django.contrib.auth import authenticate
from django.contrib.auth.password_validation import validate_password
from .models import User
class UserRegistrationSerializer(serializers.ModelSerializer):
"""用户注册序列化器"""
password = serializers.CharField(write_only=True, validators=[validate_password])
password_confirm = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ('username', 'email', 'first_name', 'last_name',
'phone', 'department', 'position', 'password', 'password_confirm')
def validate(self, attrs):
if attrs['password'] != attrs['password_confirm']:
raise serializers.ValidationError("密码不一致")
return attrs
def create(self, validated_data):
validated_data.pop('password_confirm', None)
user = User.objects.create_user(**validated_data)
return user
class UserLoginSerializer(serializers.Serializer):
"""用户登录序列化器"""
username = serializers.CharField()
password = serializers.CharField(write_only=True)
def validate(self, attrs):
username = attrs.get('username')
password = attrs.get('password')
if username and password:
user = authenticate(username=username, password=password)
if not user:
raise serializers.ValidationError('用户名或密码错误')
if not user.is_active:
raise serializers.ValidationError('用户账号已被禁用')
attrs['user'] = user
else:
raise serializers.ValidationError('用户名和密码不能为空')
return attrs
class UserProfileSerializer(serializers.ModelSerializer):
"""用户信息序列化器"""
full_name = serializers.SerializerMethodField()
class Meta:
model = User
fields = ('id', 'username', 'email', 'first_name', 'last_name',
'full_name', 'phone', 'department', 'position', 'avatar',
'is_staff', 'is_superuser', 'date_joined')
read_only_fields = ('id', 'username', 'is_staff', 'is_superuser', 'date_joined')
def get_full_name(self, obj):
return f'{obj.first_name} {obj.last_name}'.strip() or obj.username
class UserListSerializer(serializers.ModelSerializer):
"""用户列表序列化器"""
full_name = serializers.SerializerMethodField()
class Meta:
model = User
fields = ('id', 'username', 'full_name', 'email', 'department', 'position', 'is_active')
def get_full_name(self, obj):
return f'{obj.first_name} {obj.last_name}'.strip() or obj.username