我有一个注册表单,在提交后,我想通过一些外部 API 执行一些数据验证,然后最终提交到另一个 API。我想异步执行此操作,因此提交者不会等待 10 秒来提交表单。
到目前为止,这是我的代码——它可以工作,但是如果在任务中抛出异常,用户会收到 500 错误(具体的异常是有时我使用的第三方 API 超时)。我的印象是,如果任务是异步执行的(注意 @task 装饰器并使用延迟来调用任务),那么无论函数中发生什么,都应该成功加载页面。
视图.py
from myapp.tasks import prepare_and_submit_data
def register(request):
form = SignupForm(request.POST or None)
if form.is_valid():
# Async function.
prepare_and_submit_data.delay(form.cleaned_data)
return render(request, 'success.html', {})
return render(request, 'signup.html', {'form': form})
任务.py
from celery.decorators import task
@task
def prepare_and_submit_data(data):
# do some external API requests and modify data
data = requests.post(BASE_URL, data=data).json()
# ...
使用 try/except 子句包装 prepare_and_submit_data 的内容并记录错误的正确解决方案是什么?或者将函数的调用包装在寄存器中?
谢谢你。