我与Django(DRF)一起管理一个物理储物柜。用户填写表单,通过发送到其电子邮件的链接进行身份验证,通过储物柜上显示的pin进行授权
我的观点应该处理三种情况:
如果用户成功进行身份验证和授权,则在 锁柜将替换为一般消息,锁柜将打开。 (已实施)
如果用户未能在3分钟内授权,则locker pin将替换为通用消息
如果用户Foo发出了新的授权请求,而用户Bar的授权仍然不完整,则将该请求堆叠在 排队等待案例1。或案例2。完成
我该怎么办:
按原样查看,如果有用:
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})
在您保存授权的模型中,您需要添加创建日期或请求日期的字段,并且必须是日期时间字段。然后在每个请求上,您可以检查从您保存的请求日期起是否已过3分钟。 您还需要一个is_authorized字段来检查您的用户是否被授权。 我们假设您从发送的电子邮件中获取用户
您需要存储上次授权启动的时间,如果用户输入pin,则清除该时间戳
上面的代码显示了如何使用数据库作为队列,在低容量用例中,这应该很好。如果卷很大,我会将储物柜
last_authorization
存储在更快的存储中,比如redis
,队列也可以在redis
中维护。但背后的逻辑是一样的相关问题 更多 >
编程相关推荐