在 django-rest-framework 中捕获参数

     2023-02-24     231

关键词:

【中文标题】在 django-rest-framework 中捕获参数【英文标题】:Capture parameters in django-rest-framework 【发布时间】:2014-02-13 02:01:42 【问题描述】:

假设这个网址:

http://localhost:8000/articles/1111/comments/

我想获取给定文章的所有 cmets(此处为 1111)。

这就是我捕获此网址的方式:

url(r'^articles/(?P<uid>[-\w]+)/comments/$', comments_views.CommentList.as_view()),

相关视图如下所示:

class CommentList(generics.ListAPIView):    
    serializer_class = CommentSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
    lookup_field = "uid"

    def get_queryset(self):
        comments = Comment.objects.filter(article= ???)
        return comments

有关信息,相关的序列化程序

class CommentSerializer(serializers.ModelSerializer):
    owner = UserSerializer()

    class Meta:
        model = Comment
        fields = ('id', 'content', 'owner', 'created_at')

如您所见,我已更新我的 get_queryset 以过滤文章中的 cmets,但我不知道如何捕获“uid”参数。 以 ?uid=value 结尾的 url,我可以使用 self.request.QUERY_PARAMS.get('uid') 但在我的情况下,我不知道该怎么做。 有什么想法吗?

【问题讨论】:

【参考方案1】:

url参数存储在self.kwargs中。 lookup_field 是通用视图在查找单个模型实例时在 ORM 中使用的字段(默认为 pk),lookup_url_kwarg 可能是您想要的属性。

所以尝试以下方法:

class CommentList(generics.ListAPIView):    
    serializer_class = CommentSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
    lookup_url_kwarg = "uid"

    def get_queryset(self):
        uid = self.kwargs.get(self.lookup_url_kwarg)
        comments = Comment.objects.filter(article=uid)
        return comments

【讨论】:

谢谢!!我尝试构建自定义 mixins(django-rest-framework.org/api-guide/…)但未成功,但您的解决方案工作正常。 :) 您可能想探索这个库,它采用query params 并以优雅的方式在queryset 上放置过滤器。 github.com/manjitkumar/drf-url-filters 嘿@Scott Woodall,我遇到了类似的问题,现在我解决了。我现在关心的是,这lookup_url_kwarg 是必须的吗?如果我有多个参数怎么办?例如uidsome_thing_else?这样做可以comments = Comment.objects.filter(article=self.kwargs.get('uid'))吗?

在 django-rest-framework 中,是不是可以同时使用 oauth 和 session 身份验证?

】在django-rest-framework中,是不是可以同时使用oauth和session身份验证?【英文标题】:Indjango-rest-framework,isitpossibletouseoauthandsessionauthenticationsimultaneously?在django-rest-framework中,是否可以同时使用oauth和session身份验证?【发布时间】... 查看详情

如何在 React 中显示来自 django-rest-framework 的错误消息

】如何在React中显示来自django-rest-framework的错误消息【英文标题】:Howtodisplayerrormessagesfromdjango-rest-frameworkinReact【发布时间】:2019-12-2910:24:11【问题描述】:我正在尝试使用Django休息框架和反应,redux来实现用户注册表单。我能... 查看详情

在带有 django-rest-framework 的过滤器中使用自定义方法

】在带有django-rest-framework的过滤器中使用自定义方法【英文标题】:Usingcustommethodsinfilterwithdjango-rest-framework【发布时间】:2014-08-1609:15:30【问题描述】:我想在我的RESTAPI-seedjangodocsonthis中过滤查询参数。但是,我希望过滤的一个... 查看详情

django-rest-framework 序列化器在多个视图中的不同字段

】django-rest-framework序列化器在多个视图中的不同字段【英文标题】:django-rest-frameworkserializerdifferentfieldsinmultipleviews【发布时间】:2017-10-1904:56:32【问题描述】:我是Django的新手,找不到解决问题的方法。问题是在使用不同视图... 查看详情

django-rest-framework 覆盖创建函数在 ModelSerializer 上不起作用

】django-rest-framework覆盖创建函数在ModelSerializer上不起作用【英文标题】:django-rest-frameworkOverridingcreatefunctionnotworkingonModelSerializer【发布时间】:2020-02-0221:41:52【问题描述】:我只想将新数据插入到我的数据库中。如果具有相同主... 查看详情

django-rest-framework - 在可浏览的 API 中自动生成表单?

】django-rest-framework-在可浏览的API中自动生成表单?【英文标题】:django-rest-framework-autogenerateforminbrowsableAPI?【发布时间】:2013-01-1500:08:22【问题描述】:不确定我是否使用了正确的词汇。在django-rest-framework免费提供的可浏览api中... 查看详情

在 HTML 页面或模板中使用 Django-REST-Framework 从在 Django 中创建的 API 获取/显示 API 数据

】在HTML页面或模板中使用Django-REST-Framework从在Django中创建的API获取/显示API数据【英文标题】:Get/DisplayAPIdataatfrontendfromanAPIcreatedinDjangousingDjango-REST-FrameworkinanHTMLpageorTemplate【发布时间】:2019-12-2715:11:36【问题描述】:我使用Django... 查看详情

django-rest-framework: api 版本控制

】django-rest-framework:api版本控制【英文标题】:django-rest-framework:apiversioning【发布时间】:2012-12-2512:52:55【问题描述】:谷歌搜索似乎普遍认为,在RESTURI中嵌入版本号是一种不好的做法和一个坏主意。即使在SO上,也有强烈的支持... 查看详情

现有版本中 django 的 Tastypie 或 django-rest-framework [关闭]

】现有版本中django的Tastypie或django-rest-framework[关闭]【英文标题】:Tastypieordjango-rest-frameworkfordjangoinexistingversions[closed]【发布时间】:2012-09-0405:47:23【问题描述】:前段时间它们确实很棒,有类似的主题证明了这一点,但是我们... 查看详情

将 django-rest-framework 中的超链接添加到 ModelViewSet

】将django-rest-framework中的超链接添加到ModelViewSet【英文标题】:AddaHyperLinkindjango-rest-frameworktoaModelViewSet【发布时间】:2015-11-0802:49:30【问题描述】:在DjangoRestFramework中是否可以在链接到详细视图的ModelViewSet列表视图中每条记录... 查看详情

断言错误:Django-rest-Framework

】断言错误:Django-rest-Framework【英文标题】:Assertionerrorat:Django-rest-Framework【发布时间】:2015-02-1313:36:02【问题描述】:我正在使用python3.4、Django1.7.1(书中考虑的版本)、Postgres9.3,我的IDE是Eclipse。我一直在研究“轻量级Django-E... 查看详情

django-rest-framework 和 swagger api 文档

】django-rest-framework和swaggerapi文档【英文标题】:django-rest-frameworkandswaggerapidocumentation【发布时间】:2014-06-0504:47:24【问题描述】:我查看了django-rest-swagger项目,我想用它来为我的项目记录api。但是如何做到这一点存在一些问题... 查看详情

如何在 django-rest-framework 中为 API 使用 TokenAuthentication

】如何在django-rest-framework中为API使用TokenAuthentication【英文标题】:HowtouseTokenAuthenticationforAPIindjango-rest-framework【发布时间】:2013-07-0718:26:11【问题描述】:我有一个django项目,使用django-rest-framework来创建api。想要使用基于令牌的... 查看详情

在视图集中创建的 Django-rest-framework 权限

】在视图集中创建的Django-rest-framework权限【英文标题】:Django-rest-frameworkpermissionsforcreateinviewset【发布时间】:2014-05-1017:03:02【问题描述】:我正在尝试创建一个RESTAPI并且卡在用户注册上:基本上我需要在注册之前获得访问令牌... 查看详情

如何在 django-rest-framework 中对权限进行单元测试?

】如何在django-rest-framework中对权限进行单元测试?【英文标题】:Howtounittestpermissionsindjango-rest-framework?【发布时间】:2016-09-0708:14:14【问题描述】:她的权限是我想要进行单元测试的示例权限。#permissions.pyfrommyapp.modelsimportMembersh... 查看详情

如何使用 TemplateHTMLRenderer 在 Django-REST-Framework 中创建/放置?

】如何使用TemplateHTMLRenderer在Django-REST-Framework中创建/放置?【英文标题】:HowdoIuseTemplateHTMLRendererforCreate/PutinDjango-REST-Framework?【发布时间】:2019-04-1512:45:20【问题描述】:我很难找到正确的方法来初始化TemplateHTMLRenderer以呈现用... 查看详情

如何处理 django-rest-framework 中 url 模式中的外键关系

】如何处理django-rest-framework中url模式中的外键关系【英文标题】:HowdoIhandleforeignkeyrelationshipintheurlpatterninthedjango-rest-framwork【发布时间】:2022-01-0120:08:15【问题描述】:在我的models.py我有以下类:classProject(models.Model):name=models.Char... 查看详情

Django-rest-framework 中的全局异常处理

】Django-rest-framework中的全局异常处理【英文标题】:GlobalExceptionHandlinginDjango-rest-framework【发布时间】:2020-06-1101:34:42【问题描述】:有没有办法在不使用djangorest框架中的try-except块的情况下全局处理所有异常。我想将django抛出的... 查看详情