2024-05-13 10:24:01 发布
网友
我有一个使用Django Rest框架的API,我想防止重复的POST请求(本着Post Exactly Once (POE)的精神)。尤其是,我要处理的情况是:
POST
有一些关于这个on the mailing list的讨论,但是没有代码具体化。现在人们如何解决这个问题?在
我通过添加对可由客户机设置的X-Idempotency-Keyhttp报头的支持来解决这个问题。然后,我使用自定义权限类检查非幂等请求:
X-Idempotency-Key
class IsIdempotent(permissions.BasePermission): message = 'Duplicate request detected.' def has_permission(self, request, view): if request.method != 'POST': return True ival = request.META.get('HTTP_X_IDEMPOTENCY_KEY') if ival is None: return True ival = ival[:128] key = 'idemp-{}-{}'.format(request.user.pk, ival) is_idempotent = bool(cache.add(key, 'yes', settings.IDEMPOTENCY_TIMEOUT)) if not is_idempotent: logger.info(u'Duplicate request (non-idempotent): %s', key) return is_idempotent
我可以这样补充我的观点:
我通过添加对可由客户机设置的
X-Idempotency-Key
http报头的支持来解决这个问题。然后,我使用自定义权限类检查非幂等请求:我可以这样补充我的观点:
^{pr2}$相关问题 更多 >
编程相关推荐