Django RESTfulAPI:如何判断GET检索到的对象是否可由当前用户编辑(例如,可放置)?

Django RESTfulAPI:如何判断GET检索到的对象是否可由当前用户编辑(例如,可放置)?,django,rest,django-rest-framework,frontend,Django,Rest,Django Rest Framework,Frontend,目前,我使用Django设置了一个RESTful API后端,我可以通过以下GET列出一组文章: api/articles/ 此外,我可以通过以下方式获得一篇文章: api/article/1/ 每篇文章都由某个用户拥有,当然,一个用户可以拥有多篇文章 在前端,我在加载页面时展示了所有文章,我希望当前登录的用户能够看到他们拥有的不同风格的文章,例如,用方框勾勒出来的,并且有一个相关的“删除”或“编辑”按钮 这要求我在检索文章之后,以编程方式告诉当前用户哪些文章是自己的。一种方法是用所有者id

目前,我使用Django设置了一个RESTful API后端,我可以通过以下GET列出一组文章:

api/articles/
此外,我可以通过以下方式获得一篇文章:

api/article/1/
每篇文章都由某个用户拥有,当然,一个用户可以拥有多篇文章

在前端,我在加载页面时展示了所有文章,我希望当前登录的用户能够看到他们拥有的不同风格的文章,例如,用方框勾勒出来的,并且有一个相关的“删除”或“编辑”按钮

这要求我在检索文章之后,以编程方式告诉当前用户哪些文章是自己的。一种方法是用所有者id检查当前用户id。但是我觉得这不是一个好的选择,因为用户id是完全在客户端进行检查的,并且可能与实际的服务器判断不一致

因此,有没有一种方法可以通过查看GET的响应(比如,让服务器返回一个属性“editable=true/false”)来判断当前用户是否可以编辑(放置)资源

我知道这可以通过手动附加这样的属性在服务器端完成。然而,我只是问是否有更好的/普遍的做法


我刚开始学习web开发,如果这个问题听起来很琐碎,我很抱歉。谢谢大家!

我认为这是一个非常有趣的问题

我有几个选择:

  • 您可以向
    GET-api/article/1
    响应添加包含此信息的HTTP头,即
    HTTP\u-METHODS\u-ALLOWED=PUT、PATH、DELETE
    。这样做有助于API客户机,因为它不需要知道任何其他信息。我认为当返回多个实体时,这不是一个好方法
  • 调用
    选项api/article/1
    。可以返回该资源上该用户允许的方法,但请注意,在我看来,这种方法在性能方面不是很好,因为它会复制到服务器的请求数
  • 但是,如果返回的实体还包含所有者或它的信息,该怎么办?在这种情况下,客户是否能够知道应用哪种策略,并尝试自己解决它?请注意,可以从另一个端点(只需要一个调用)或甚至通过登录响应来获取策略。如果您的实体不包含此类信息,也可以将其作为HTTP头返回(如上面的第一个选项)

您可以按照建议手动附加礼节。这种方法的优点是不需要任何其他http请求

第二种可能是,您的客户端故意请求有关端点权限的信息。在这种情况下,我建议使用选项HTTP方法。您向api/articles/1发送选项HTTP请求,后端返回所需信息。这可能正是方法和DRF元数据的选项


这些选项看起来像我要找的。非常感谢你!不客气。您可以通过接受我的回答来感谢我,感谢任何其他将面临类似问题的用户。