Skip to main content
 首页 » 编程设计

python之发送没有 "returning"的 HttpResponse(status=200)之发送到哪里

2025年05月04日26rubylouvre

我正在使用 Slack Events API 来记录与我的 slackbot 的对话。

事件 API 使用 HTTP POST 将消息推送到我的 Django 服务器。 Slack 期望在 3 秒内收到 HTTP 200 响应,否则他们将重新发布消息。

我想存储/处理事件,但我不确定处理是否会在 3 秒内完成。我想将 HTTP 状态 200 发送回 Slack,然后继续该过程,但我不知道将它发送到哪里。通常,我返回 HttpResponse(status=200) 并且 python 管理目的地/发送。

如何识别响应 URI?我可以使用 urllib2 发送 HTTP Status 200 吗?

import json 
import urllib2 
from django.http import HttpResponse 
 
def processEvent(event): 
    # do some stuff that takes longer than 3 seconds 
    return 
 
def incomingEvent(request): 
    event = json.loads(request.body) 
    url = request.????? 
    req = urllib2.Request(url, HttpResponse(200)) 
    processEvent(event) 

请您参考如下方法:

这种流程的思想是用长流程启动一个异步任务,并快速将响应返回给发送者(在本例中为 Slack 服务器)。

但是如何异步执行这个processEvent()呢?你有很多解决方案。您可以创建一个新线程并将进程配置为在这个新线程内运行,但在使用 Django 时,这不是一种很常见的方式。

查看专门用于异步作业执行的 python 库。一个非常常见的图书馆是 celery .

最后,你的 View 变成了这样:

@app.task 
def processEvent(event): 
    # do some stuff that takes longer than 3 seconds 
    return 
 
def incomingEvent(request): 
    event = json.loads(request.body) 
    processEvent.delay(event) 
    return HttpResponse()