1 基于用户视图集
修改用户 涉及到用户密码的修改 反序列化入库时需要密文保存
增加用户 涉及到用户密码的加密存储
2 反序列化入库修改字段入库信息 需要字段对应 外键
在数据库中自动添加后缀_id
一、用户视图集 重写update方法
1 视图里重写
方案一 在视图里重写update方法逻辑
user.set_password
(request.data.get(‘password’))
# 用户管理视图集
class UserInfoViewSet(ModelViewSet):
queryset = User.objects.all()
serializer_class = User_Serializer
lookup_field = 'pk'
lookup_url_kwarg = 'pk'
# 修改用户信息 重写update方法
def update(self, request, *args, **kwargs):
try:
user = self.get_object()
user.username = request.data.get('username')
user.set_password(request.data.get('password'))
user.phone = request.data.get('phone')
user.email = request.data.get('email')
user.save()
except:
return Response({'code': 500, 'msg': '修改用户报错'})
return Response({'code': 200, 'msg': '修改用户成功'})
2 序列化器里重写
方案二 借助序列化器 在序列化器重写update方法
instance.set_password
(validated_data.get(‘password’))
# 用户序列化器
class User_Serializer(ModelSerializer):
password = serializers.CharField(write_only=True, trim_whitespace=True, max_length=50, min_length=2)
class Meta:
model = User
fields = ['id', 'username', 'last_login', 'password', 'phone', 'date_joined', 'email'] #序列化字段
read_only_fields = ['id', 'date_joined'] # 只读,不需要输入
# 修改用户信息 重写update方法
def update(self, instance, validated_data):
instance.username = validated_data.get('username')
instance.set_password(validated_data.get('password'))
instance.phone = validated_data.get('phone')
instance.email = validated_data.get('email')
instance.save()
return instance
二、用户视图集 重写create方法
1 视图里重写
方案一 在视图里重写create方法逻辑
User.objects.create_user
(**request.data)
# 用户管理视图集
class UserInfoViewSet(ModelViewSet):
queryset = User.objects.all()
serializer_class = User_Serializer
lookup_field = 'pk'
lookup_url_kwarg = 'pk'
# 添加用户信息 重写create方法 方案一 在视图逻辑自己写
def create(self, request, *args, **kwargs):
try:
User.objects.create_user(**request.data)
except:
return Response({'code': 500, 'msg': '创建用户报错'})
return Response({'code': 200, 'msg': '添加用户成功'})
2 序列化器里重写
方案二 借助序列化器 在序列化器重写create方法
User.objects.create_user
(**validated_data)
# 用户序列化器
class User_Serializer(ModelSerializer):
password = serializers.CharField(write_only=True, trim_whitespace=True, max_length=50, min_length=2)
class Meta:
model = User
fields = ['id', 'username', 'last_login', 'password', 'phone', 'date_joined', 'email']
read_only_fields = ['id', 'date_joined'] # 只读,不需要输入
# 添加用户信息 重写create方法
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
return user
三 反序列化入库修改字段入库信
需要字段一一对应
外键
在数据库中自动添加后缀_id
注意: 如果无法判断从前端获取的数据和类型,可以print()打印一下, type()判断类型
print(‘获取的数据spu>>>>>>’, spu,‘spu的数据类型>>>>>>’, type(spu), ‘<<<<<’, spu.desc_detail)
# spu视图集
class SPUViewSet(ModelViewSet):
queryset = SPU.objects.all()
serializer_class = SPU_Serializer
def update(self, request, *args, **kwargs):
spu = self.get_object()
# print('xxxxxxx>>>>>>', spu, type(spu), '<<<<<', spu.desc_detail)
name = request.data.get('name')
spu.name = name+'_luoting修改'
spu.brand_id = request.data.get('brand')
spu.category1_id = request.data.get('category1')
spu.category2_id = request.data.get('category2')
spu.category3_id = request.data.get('category3')
spu.desc_detail = request.data.get('desc_detail')
spu.desc_pack = request.data.get('desc_pack')
spu.desc_service = request.data.get('desc_service')
spu.brand_name = request.data.get('brand_name')
spu.save()
return Response({'status': 200, 'message': 'SPU修改成功'})