使用 html 文件更改视图变量文件

Change a view varible file with the html file

我正在创建一个在线商店,并在其中添加了用于付款的 Stripe Checkout,一切正常,问题是视图功能仅管理一个价格。它看起来像这样:

def charge(request): # new
    if request.method == 'POST':
        charge = stripe.Charge.create(
            amount=179900,
            currency='mxn',
            description='Bota Caballero',
            source=request.POST['stripeToken']
        )
        return render(request, 'charge.html')

金额表示价格,在我的 html 主页上我有一个 select 标签,它定义了产品的成本

                           <select id="modelo" onchange="modelo()" class="select__option" required>
                                <option>Selecciona Modelo...</option>
                                <option>99</option>
                                <option>99</option>
                                <option>99</option>
                            </select>

我想根据 select 标签中 select 的内容更改视图文件的数量变量。有什么想法吗?

您通常会通过 form 传递值并使用 request.POST.get('amount', None) 检索它,但是..

您应该从不通过客户可编辑的表格传递定价。

例如,如果您 POST 一个包含您的选择的表格 view,然后将该值动态设置为您的金额,您就会遇到一些严重的定价问题。

最终用户可以简单地修改 POST 数据并设置他们喜欢的任何值。


我认为最好的解决方案是:

  1. 将您设置的定价存储在数据库中
  2. 通过 POST
  3. 传递产品标识或类似信息
  4. 从数据库中检索定价
  5. 根据数据库响应设置动态定价

我假设您的 select 标签在表单中。您可以简单地检索您的用户编辑的 value/option select 并在您的视图函数中使用它来设置 Stripe 费用。

<select id="modelo" name="modelo_price" onchange="modelo()" class="select__option" required>
   <option>Selecciona Modelo...</option> 
   <option>99</option>
   <option>99</option>
   <option>99</option>
</select>
def charge(request): # new
   if request.method == 'POST':
      # Here you retrieve the value submitted by your user
      charge_amount = int(request.form.get('modelo_price')) * 100
      
      charge = stripe.Charge.create(
            amount=charge_amount,
            currency='mxn',
            description='Bota Caballero',
            source=request.POST['stripeToken']
        )
        return render(request, 'charge.html')