我目前正在使用Django开发一个API。
但是,我想创建一个返回具有以下endpoint的当前用户的视图:/用户/当前/
。
为此,我创建了一个列表视图,并过滤了发出请求的用户的查询集。这行得通,但结果是一个列表,而不是一个单一的对象。结合分页,与其他endpoint相比,结果看起来太复杂和不一致了。
我也试图创建一个详细视图并过滤查询集,但是DRF抱怨我没有提供pk或slug。
您可以使用mixins,而不是使用< code>ModelViewSet的全部功能。有一个< code>RetrieveModelMixin用于检索单个对象,就像这里提到的那样-http://www . django-rest-framework . org/API-guide/view sets/# example _ 3
class UserViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
permission_classes = (permissions.IsAuthenticated,)
serializer_class = UserSerializer
def get_object(self):
return self.request.user
如果您还需要更新模型,只需添加 UpdateModelMixin
。
最好的方法是使用view set. Model ViewSet
的力量,如下所示:
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
def get_object(self):
pk = self.kwargs.get('pk')
if pk == "current":
return self.request.user
return super().get_object()
视图集。Model ViewSet
是混音的组合。CreateModel Mi新
混音。RetrieveModel Mi新
混音。UpdateModel Mi新
混音。ListModel Mi新
视图集。通用视图集
。如果您需要列出所有或获得特定用户,包括当前经过身份验证的用户,您只需像这样替换它
class UserViewSet(mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
# ...
有了这样的东西,你可能最好打破常规视图,自己编写视图。
@api_view(['GET'])
def current_user(request):
serializer = UserSerializer(request.user)
return Response(serializer.data)
您也可以使用基于类的视图做同样的事情,如下所示...
class CurrentUserView(APIView):
def get(self, request):
serializer = UserSerializer(request.user)
return Response(serializer.data)
当然,也不要求您使用序列化程序,您同样可以从用户实例中提取您需要的字段。
@api_view(['GET'])
def current_user(request):
user = request.user
return Response({
'username': user.username,
'email': user.email,
...
})
希望有帮助。
我想我会在这里问这个问题,因为我不太确定我会错在哪里。我正在尝试使用Django Rest框架类通过AJAX执行POST请求。但是,每当事件触发时,我都会收到以下错误: 这是堆栈跟踪中显示的内容: 上下文 我试图做到这一点,当用户单击“添加到列表”按钮时,它会向用户定义的列表发送一个cafeName(以及最终的其他详细信息)。 我想知道是否有人可以看看我的代码,并给我一些指导,我哪里出了问题? 代
当我要求一个图像http://127.0.0.1:8000/api/images/1/或者传入参数进行裁剪http://127.0.0.1:8000/api/images/1/?height=320 我得到的答复是: 而在http://127.0.0.1:8000/api/images/ 答复是: 为什么缩略图不容易返回主机名,我如何将基本网址追加到响应中? 以下是我的看法。派克
这是关于Flutter Firebase认证插件。< br >我试图在创建新用户后发送验证电子邮件,但sendEmailVerification()在内部使用currentUser()。这在我看来像是一个bug,但为了以防万一,我向stackoverflow提出了一个问题。错误在Android和IOS上是一样的。< br > 前两行返回Firebase User。第三个返回null。第四,如果第三
问题内容: 民间, 我试图了解MomentJS API。在机器上获取当前时间的合适方法是什么? 与 试图解析他们的文档,并且不清楚使用什么。 http://momentjs.com/docs/#/query/is-a- moment/ 问题答案: 在这里,您要为CurrentDate分配一个momentjs实例: 这里只是一个字符串,是momentjs实例的默认格式的结果: 这里是自一月…以来的秒
我遇到了这样的错误: 回溯: 文件“/usr/local/lib/python2.7/dist packages/django/core/handlers/exception.py”,位于内部41。响应=获取响应(请求) 文件“/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py”,位于_-get_-response
前端框架图图形展示: 如上图所示,WeX5前端框架(UI2)分以下部分: 基础库 WeX5前端依赖的两个基础库:数据感知MVVM和jQuery,其中数据感知MVVM基于Knockoutjs改进的。 模块框架 UI2遵循AMD模块标准,采用RequireJS实现。模块化是UI2的基础,UI2的所有资源(包括js、css和html等)都是模块,都采用模块化方式引入,采用模块化方式管理依赖。 组件框架