1、对于用户头像,必须提供接口给用户来更换头像。
2、在django中,使用update来更新头像的时候,会出现问题,数据库对应的字段只能接收到上传的图片的名字。
数据库表设计:
class User(AbstractUser):
# 继承原来的auth表,拓展字段,不要与原来有的字段名重复
email = models.EmailField(verbose_name='邮箱')
icon = models.FileField(upload_to='icon', default='/icon/default.jpg/', verbose_name='用户头像')
name = models.CharField(max_length=12, verbose_name='用户姓名', null=True)
视图函数:
class PersonCenterUpdateview(GenericAPIView,ViewSetMixin):
def get(self,request):
user = models.User.objects.get(id=request.auth.get('id'))
ser = serializers.PersonIconViewSerializer(instance=user)
return ApiResponse(code=100,data=ser.data)
路由配置:
urlpatterns = [
path('personupdate/',views.PersonCenterUpdateview.as_view(),name='test')
]
序列化器:
#个人中心更换头像
class PersonIconViewSerializer(serializers.ModelSerializer):
class Meta:
model = models.User
fields=["icon"]
def validate(self, attrs):
id = self.context.get('id')
request = self.context.get('request')
file = request.FILES.get('icon')
try:
user = models.User.objects.get(id=id)
user.icon=file
user.save()
return attrs
except Exception as e:
raise ValidationError(str(e))
解决方法:不再使用update方法来更新数据,而是通过对象.变量来赋值。
?user = models.User.objects.get(id=id) ?user.icon=file ?user.save()
通过这种方式来更新头像就不会出现update时的问题了。。
|