- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 django 作为后端并使用 AngularJS 从我的 RESTfull 端点中提取数据。
我遇到了一个我想不出最佳解决方案的问题。
目前我有这个:
/api/planned-meals?from=2014-3-18&to=2014-3-28
这给了我这两个日期之间的所有项目。
但是我希望能够从当前请求的用户那里获取这两个日期之间的所有项目,但是在调用资源时我不知道用户的 ID。但在后端,我可以将所有者设置为当前请求的用户。
创建另一个表示用户应该是当前请求用户的参数是否是一种不好的做法。它可能是这样的:
/api/planned-meals?from=2014-3-18&to=2014-3-28&user=self
或者创建另一个始终返回请求用户是所有者的项目的资源是否更好?
这是我目前在 Django 中的 View :
class PlannedMealList(generics.ListCreateAPIView):
serializer_class = PlannedMealSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
def get_queryset(self):
"""
Overiding the queryset if some parameters isset
"""
queryset = PlannedMeal.objects.all()
date_from = self.request.QUERY_PARAMS.get('from', None)
date_to = self.request.QUERY_PARAMS.get('to', None)
if date_from is not None and date_to is not None:
queryset = queryset.filter(date__gte=date_from).filter(date__lte=date_to)
return queryset
def pre_save(self, obj):
obj.user = self.request.user
我希望你能帮助我,或者至少给我一些关于什么是最佳实践的想法?
最佳答案
我认为你可以双管齐下,但你必须考虑几件事。
您可以为“QUERY_PARAMS”做一个过滤器,什么时候是“self”,您只需查询所有者 request.user 或用户名,当然,不能有名为“self”的用户对于用户名,否则你将有一个边缘案例
如果您决定为此创建自己的端点,您可以这样做,根据需要创建尽可能多的过滤器,例如:
from rest_framework import filters
class OwnerFilterBackend(filters.BaseFilterBackend):
"""
Filter that request user view his own objects
"""
def filter_queryset(self, request, queryset, view):
"""
:param request: HTTP Request
:param queryset: View QuerySet
:param view: View Instance
:return: QuerySet filter by the user request as the owner
"""
return queryset.filter(owner=request.user)
然后只需将过滤器添加到新的 api View 中:
class PlannedMealList(generics.ListCreateAPIView):
serializer_class = PlannedMealSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
filter_backends = (OwnerFilterBackend,)
....
....
您可以应用多个过滤器,例如日期或订单,这将有助于保持干燥
应用多个过滤器的示例
class PlannedMealList(generics.ListCreateAPIView):
serializer_class = PlannedMealSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
filter_backends = (OwnerFilterBackend, filters.DjangoFilterBackend, filters.OrderingFilter)
filter_class = MyFilterClass
....
....
如果您还有其他问题,我可以帮助您;)
关于django - 在 RESTfull 资源中按所有者过滤项目的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23656825/
我使用 django 作为后端并使用 AngularJS 从我的 RESTfull 端点中提取数据。 我遇到了一个我想不出最佳解决方案的问题。 目前我有这个: /api/planned-meals?f
我在 SpringBoot 中使用 JPA 使用 MySql 数据库创建了一个完整的 Web 服务,我的 Web 服务在 localhost 上运行良好用windows机器。但是当我在 Linux 上
自然而然的答案当然是否定的,所以为了理解我的意思,请让我解释一下。 我们有一个服务,其中客户端 POST 要执行的作业,但它们不会在发布时执行。相反,我们的服务使用一个 ID 进行响应,客户端可以使用
我们正在尝试开发一个 Web 应用程序,其中 Controller (Servlet)应充当静态服务,最初浏览器将充当客户端,然后将来可能会有第三方应用程序使用来自同一 Controller 的服务。
这是我第一次尝试使用 RESTfull 应用程序。我已经阅读了很多与我的问题相同的页面,但他们并没有安静地击中目标。 这是我的服务。 package com.tutorialspoint; impor
我正在尝试使用会出错的安全 Restful 服务 Error = Error Domain=NSURLErrorDomain Code=-1202 “此服务器的证书无效。您可能正在连接到一个伪装成“x
我在 IIS 上发布了简单的 .net restful web 服务: [OperationContract] [WebInvoke(Method = "GET", ResponseF
无论在浏览器中输入什么路径,meteor 应用程序总是返回一个模板。如何添加路由以在 meteor 应用程序中启用 RESTfull 功能? 最佳答案 为了向我的 meteor 应用程序添加 REST
@Path("file.upload") public class UploadFileService { @POST @Consumes(MediaType.MULTIPART_FORM_DATA)
我有以下类和 web.xml 文件。 spring框架是否支持@PATH、@PUT、@Consumes...等jax-rs注解? 换句话说,我可以使用 @PATH 代替 @RequestMapping
我在 .NET 4 中创建了一个 WCF restfull 服务,并在 IIS 7.5/windows 7 x86 下发布了它。动词 GET 和 POST 工作正常,但 DELETE 和 PUT 给出
我的一个 Controller 有问题。当我使用(jason内容类型)从 Angular 发送(POST)数据到java Controller 时,我看到主题中可见的错误。所以我无法捕获服务器的响应。
我正在使用 restfull webservice 开发一个网站。我收到此错误 java.lang.ClassCastException: com.ehr.data.CombineClass cann
我制作了一个简单的 REST Jersey 应用程序,从 maven jersey-quickstart-grizzly 原型(prototype)开始(来自 http://download.java
我已经创建了 WCF Restfull 服务,但是当我从 JS 调用它时,它总是说找不到 Respurce。这是y员工类 namespace WcfRestMVC.Models { [Data
假设我想为一家书店开发一个 RESTfull WebApi。我将有一个 Api 来获取书籍信息,例如:books/1。 我想在有人获得图书信息时创建一个日志。因此,稍后我可以通过 Api 生成关于哪本
我用 Java 开发了一个网络服务。下面是它的一个方法。 @Path("/setup") public class SetupJSONService { @POST @Path("/i
我习惯做ROR,但我需要在Java环境中制作一个RESTfull WebService。所以我决定用 Play 来尝试一下!因为它看起来确实是个好主意。 所以我试图找到一种方法将 JSON 添加到我已
我有一个 ProductsController,我想创建一个复制产品的操作方法。它只需要一个参数,即一个 Id,这让我想要使用一个简单的 GET 请求。不过,有些东西告诉我 GET 在这里没有意义。我
我正在寻找最有效的方法来处理 ajax 请求作为使用普通表单的同步请求。据我所知,有 2 种方法可以处理例如新的订单发布请求: 选项 1: Controller 中的 AJAX 检查(为简单起见,省略
我是一名优秀的程序员,十分优秀!