python - 如何在 Django 中排队请求?

标签 python django django-rest-framework

我用 Django (DRF) 管理一个物理储物柜。用户填写表格,通过发送到他们电子邮件的链接进行身份验证,通过储物柜上显示的密码进行授权。
我的观点应该处理三种情况:

  • 如果用户通过身份验证和授权成功,则显示在
    储物柜被一条通用消息替换,储物柜打开。
    (已经实现)
  • 如果用户未能在 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})
    

    最佳答案

    在您保存授权的模型中,您需要添加 date_created 或 date_requested 字段,并且必须是日期时间字段。然后在每个请求中,您可以检查从您保存的 date_requested 是否过去了 3 分钟。
    您还需要一个 is_authorized 字段来检查您的用户是否被授权。
    我们假设您是从您发送的电子邮件中获取用户的。

    user = get_object_or_404(User,email=kwargs['email'])
    if user.date_request + timedelta(minutes=3) > datetime.datetime.now():
       "do your authorzing stuff ..."
    else:
         return HttpResponse("you need to wait 3 minutes to request again")
    

    关于python - 如何在 Django 中排队请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69342186/

    相关文章:

    python - 如何检查线程当前是否持有 GIL?

    Django Rest 创建后删除密码

    python - Django ATOMIC_REQUESTS 不工作

    python - django-hstore 与 Django 1.6 的兼容性问题

    python - 使用 wagtail 打开主页的 url.py 文件是什么?

    python - PyDev 和 Django : how to restart dev server?

    python - Django 休息框架 : How to initialise & use custom exception handler?

    python - 如何监控我的 gtalk 状态消息的变化?

    Python:在非常大的数字列表中搜索数字列表,允许+或- 5错误

    java - 每个映射器的多个输入文件 'type'