gpt4 book ai didi

django - 使用 DRF 在 RESTful API 中实现 RPC

转载 作者:行者123 更新时间:2023-12-04 08:50:10 27 4
gpt4 key购买 nike

我正在使用 Django Rest Framework 来呈现 RESTful API。我有一个路由器/ View 集/序列化器为 Person 创建端点资源:

/api/People/<id>/

我想要某种方式来触发对该资源的非幂等操作(例如 send-email-to )。我必须这样做而不必重新执行大量路由/序列化基础结构的一个想法是向序列化程序添加一个只写 bool 字段:
class PersonSerializer(serializers.ModelSerializer):
send_email = serializers.BooleanField(write_only=True, required=False)

然后向模型添加一个只写属性:
class Person(models.Model):
...
def do_send_email(self, value):
# We also need to check the object is fully constructed here, I think
if do_send_email:
...
send_email = property(fset=do_send_email)

然后我可以 PATCH到终点,有效载荷为 send_email=True .

这是使用 REST API 完成类似 RPC 的功能的最佳方式吗?这是在 DRF 中完成此任务的最佳方法吗?理想情况下,我想尽可能少地解决这个问题(即查看解决方案的代码行数是多少)。 send-email-to不是我想要处理的唯一 Action 。

最佳答案

您可以使用 extra actions drf 提供。在你的情况下,我会使用@detail_route。

类似的东西:

@detail_route(methods=['post'])
def send_mail(self, request, pk=None):
send_mail_to(pk) # Write here your email function.

你必须在 Person View 集中定义这个函数,所以为了调用这个函数,你必须 发布 /people/{person_id}/send_mail 其中 {person_id} 是此人的主键。

附带说明一下,由于此函数是从客户端同步调用的,因此可能需要一段时间才能回答,我建议您使用 celery .这将允许您异步调用 send_mail_to 函数而不会延迟用户响应。

关于django - 使用 DRF 在 RESTful API 中实现 RPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26488915/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com