【问题标题】:Change a view varible file with the html file使用 html 文件更改视图变量文件
【发布时间】:2021-04-15 23:50:48
【问题描述】:

我正在创建一家在线商店,并在其中添加了 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 id="modelo" onchange="modelo()" class="select__option" required>
                                <option>Selecciona Modelo...</option>
                                <option>$1799</option>
                                <option>$1299</option>
                                <option>$1199</option>
                            </select>

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

【问题讨论】:

    标签: python django stripe-payments


    【解决方案1】:

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

    您应该切勿通过客户可编辑的表单传递定价。

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

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


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

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

    【讨论】:

    • 你能用代码给出一个简单的例子吗?我是 Django 和 Stripe 的新手。谢谢
    • @BernardoOlisan 像编写任何其他模型一样简单地编写它。假设您有一个模型用于管理其中存储了定价的产品,请从模型中检索定价并使用它来创建您的付款。
    • 是的,但问题是我没有可以管理我的产品的模型,我的商店很简单,只有3个产品所以我没有为它制作模型
    • 为它制作一个模型。不要在客户端存储这种东西。创建模型,添加产品和定价。以表单形式提供它,然后始终验证从用户那里收到的数据。
    • 但我不知道如何在视图上做动态价格,有什么例子吗?
    【解决方案2】:

    我假设您的选择标签在表单中。您可以简单地检索用户选择的值/选项,并在您的视图函数中使用它来设置 Stripe 费用。

    <select id="modelo" name="modelo_price" onchange="modelo()" class="select__option" required>
       <option>Selecciona Modelo...</option> 
       <option>$1799</option>
       <option>$1299</option>
       <option>$1199</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')
    

    【讨论】:

    • 我已经投了反对票,即使答案确实可以解决问题。鉴于用户想要创建在线商店的上下文,用户永远不应该大声定义发送到Stripe 的定价。该解决方案允许最终用户修改POST 并设置他们认为适合产品的任何值。这是一个巨大的安全问题,不应该将其用于生产。
    • @PacketLoss 是的,我会试试你的安全
    • @PacketLoss 有没有办法像这样但安全?
    • @PacketLoss 正如用户所说,他是初学者,这种方法不仅易于实现,而且比调用数据库连接更容易理解。实现安全方法来检查表单中发送的值是否被伪造非常容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2021-12-18
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多