saw*_*yer 5 python django httpresponse slack-api
我正在使用 Slack Events API 来记录与我的 slackbot 的对话。
Events API 使用 HTTP POST 将消息推送到我的 Django 服务器。Slack 期望在 3 秒内收到 HTTP 200 响应,否则他们将重新 POST 消息。
我想存储/处理事件,但我不确定处理是否会在 3 秒内完成。我想将 HTTP Status 200 发送回 Slack,然后继续该过程,但我不知道将其发送到哪里。通常,我return HttpResponse(status=200)和 python 管理目的地/发送。
如何识别响应 URI?我可以发送HTTP Status 200吗urllib2?
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)
Run Code Online (Sandbox Code Playgroud)
这种流程的想法是用长流程启动异步任务,并快速将响应返回给发送者(在本例中为 Slack 服务器)。
但是如何异步执行这个processEvent()呢?你有很多解决方案。您可以创建一个新线程并将进程配置为在该新线程内运行,但这在使用 Django 时并不是一种非常常见的方法。
查看专门用于异步作业执行的 python 库。一个非常常见的库就是celery。
最后,你的视图变成这样:
@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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4617 次 |
| 最近记录: |