gpt4 book ai didi

python - 有哪些常用技术可以确保 TemplateView 的 get_context_data 中的代码逻辑被执行一次?

转载 作者:行者123 更新时间:2023-12-01 01:39:24 26 4
gpt4 key购买 nike

目前,我有以下付款按钮。

<a href="https://localhost/subscribe/?payload_nonce=token123">PAY NOW</a>

当用户点击链接时,幕后发生的事情如下。

  1. 获取用户的 token 输入。
  2. 支付网关处理收到的 token ,并返回成功/失败结果。
  3. 向用户显示成功/失败结果。

我希望的是,当用户单击浏览器中的刷新按钮时,将跳过步骤 1 和步骤 2。

我们不希望用户重复付款。

但是,只显示之前的网关成功/失败结果。

<小时/>

这是TemplateView代码。

class SubscribeView(TemplateView):
template_name = 'subscribe.html'

def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(SubscribeView, self).get_context_data(**kwargs)

# Step 1: Get token input from user
#
payload_nonce = self.request.GET.get('payload_nonce')


# Step 2: Payment gateway processes the
# received token, and return success/fail result.
...
...
##############################
# Submit it to payment gateway
##############################
...
...


# Step 3: Display success/fail result to user.
#
context['is_success'] = result.is_success
context['message'] = result.message

return context

我想知道,有哪些常用技术可以确保TemplateView的get_context_data中的代码逻辑被执行一次?

最佳答案

这里真正的问题是you are updating state in an operation that should be idempotent

正确的解决方案是使用仅接受 POST 请求的专用 View (这意味着您需要 HTML 表单而不是链接)来处理步骤 1 和 2 以及 then redirect to your template view 。当然,您必须将结果(以及关联的 token )存储在某处,以便您可以 1. 避免为同一 token 重新发送两次付款,以及 2. 在模板 View 的 get_context_data 中检索与 token 关联的结果。方法。

注意:当然,您也可以在同一 View 中处理 GET 和 POST 请求,但随后会出现 TemplateView可能不是最好的选择(实际上基于类的 View 很少是最好的选择,除非您需要继承 - 基于函数的 View 通常方法更简单)。

关于python - 有哪些常用技术可以确保 TemplateView 的 get_context_data 中的代码逻辑被执行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52055169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com