【发布时间】:2021-11-19 08:12:36
【问题描述】:
我使用 Django (DRF) 管理一个物理储物柜。用户填写表格,通过发送到他们电子邮件的链接进行身份验证,通过储物柜上显示的密码进行授权。
我的观点应该处理三种情况:
-
如果用户认证和授权成功,pin显示在 储物柜被通用消息替换,储物柜打开。 (已经实现)
-
如果用户在 3 分钟内未授权,则锁定密码将替换为通用消息。
-
如果用户Foo发起了新的授权请求,而对用户Bar的授权还没有完成,则将请求堆叠在 一个队列并等待案例 1. 或案例 2. 完成。
我该怎么做:
- 实现一个请求队列,这样当有新请求进入时,储物柜上显示的 pin 不会被覆盖/替换?
- 如何在处理下一个请求之前等待 3 分钟以完成授权?
按原样查看,以防有用:
if request.method == 'POST':
form = ConfirmationForm(request.POST)
if form.is_valid():
if pin == form.cleaned_data['pin']:
open_bay(jwt_token=jwt[1], pin=pin)
display_generic_message(jwt_token=jwt[1])
lock_bay(jwt_token=jwt[1], pin=pin)
return render(request, 'static/pages/request-success.html')
else:
pass
else:
form = ConfirmationForm()
return render(request, 'static/pages/confirmation.html', {'form': form})
【问题讨论】:
-
Django 在多处理/多线程方面相当糟糕,这就是为什么队列任务的解决方案通常涉及一个 Redis 实例和一个或多个将处理队列的工作人员。例如(但可能还有其他):github.com/rq/django-rq
标签: python django django-rest-framework