如何验证 Django Oscar 中的帐单地址信息?

Posted

技术标签:

【中文标题】如何验证 Django Oscar 中的帐单地址信息?【英文标题】:How to validate the billing address information in Django Oscar? 【发布时间】:2018-12-22 12:05:18 【问题描述】:

如何在我的 Django Oscar 付款详情视图中收集帐单地址信息? 到目前为止,我已经在 github 和方法 handle_place_order_submission() 中阅读了 Django Oscar 的代码:https://github.com/django-oscar/django-oscar/blob/05049733e5c6152e37f7b99d957fd67d825c78b8/src/oscar/apps/checkout/views.py#L442,代码是:

    def handle_place_order_submission(self, request):
        return self.submit(**self.build_submission())

他们说我应该重写这个方法,然后调用 build_submission。 所以我已经分叉了我的结帐应用程序,然后在 PaymentDetailsView() 下。我编写了一个名为 build_submission 的函数,还从 oscar.apps.payment.forms import BillingAddressForm 导入了 BillingAddressForm()。

    def build_submission(self, **kwargs):
        submission = super(
            PaymentDetailsView, self).build_submission(**kwargs)
        submission['billing_address'] = BillingAddressForm(self.request.POST)
        return submission

我在 payment_details.html 表单中使用了 billing_address_form 。代码在这里:

<form action="% url 'checkout:preview' %" class="form-stacked" method="POST">
        % csrf_token %
        <div class="well">
            <!--<div class="container form-group" style="margin: 0 auto;text-align: center">-->
                 billing_address_form 
            <!--</div>-->
        </div>
            <br>
            <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
                    data-key=" stripe_publishable_key " 
                    data-amount=" order_total_incl_tax_cents "
                    data-name=" shop_name "
                    data-locale="auto"
                    data-currency="cad"
                    data-description=" basket.num_items  items ( order_total.incl_tax|currency )">
            </script>
    </form>

现在我如何验证帐单地址表单,我应该创建一些单独的方法吗?我是 Oscar 的新手,所以用一些代码回答可能会帮助我更好地理解。 或者有没有其他方法可以从用户那里收集账单地址?

【问题讨论】:

【参考方案1】:

我无法使用 javascript + google maps services 进行验证。将表单的提交按钮设置为禁用,直到谷歌地图返回地址中有有效地址。

为了向google询问地址的正确性,你必须把这个地址的所有片段放在一起,我的意思是,记住一个完整的地址是由那个表单的几个字段组成的,比如:line1line2postcodecountry 等...

或者...

您可以在表单的clean 方法中使用Python + Python Client for Google Maps Services 进行验证。您必须记住,表单无效,无法为用户设置正确的消息,说明原因。

如果验证失败,您将重定向到哪个页面取决于您。

【讨论】:

以上是关于如何验证 Django Oscar 中的帐单地址信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何向 django-oscar 添加新视图

如何扩展 django oscar 客户模型字段?

如何将 Stripe 支付网关与 Django Oscar 集成?

如何通过条带结帐传递帐单详细信息

如何创建 django-oscar 产品类作为数据迁移

如何在django oscar中设置Paypal重定向网址?