前言
这是今天写接口遇到的。写api/v2/user接口,根据用户sso登录后的user信息查询返回数据库中的用户信息,包括用户ID,用户名,用户上次登录时间,用户加入时间等。
坑点
在使用serializer时,没有使用restframework的ModelSerializer,而是使用了django的Serializer,导致了一直查询为空。
代码
class UserView(ViewSet):
@method_decorator(login_required)
@list_route(methods=['GET'])
def get(self, *args, **kargs):
"""
description: 查询用户信息
"""
queryset = User.objects.filter(username=self.request.user)
serializer = UserSerializer(instance=queryset[0], many=False)
return Response(status=200, data=serializer.data)
实际上,从代码中可以看出,request -> queryset -> model -> serializer -> json data
这是一种场景,还有一种场景是 request -> queryset -> model -> serializer -> db
# update repo info
def update(self, request, repo_id, format=None):
try:
repo = Repos.objects.get(id=repo_id)
serializer = ReposSerializer(repo, data=request.data, fields=allow_modify_fields)
if serializer.is_valid():
serializer.save()
return Response({"status": 0}, status=status.HTTP_201_CREATED)
except Exception as e:
return Response({"status": -1, "error": "Service busy!"},
status=status.HTTP_500_INTERNAL_SERVER_ERROR)