python - 如何验证 Django Oscar 中的帐单地址信息?
问题描述
如何在我的 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 的新手,所以一些代码的答案可能会帮助我更好地理解。或者有没有其他方法可以从用户那里收集账单地址?
解决方案
我无法使用JavaScript
+进行验证google maps services
。将表单的提交按钮设置为禁用,直到谷歌地图返回地址中有有效地址。
为了向google询问地址的正确性,您必须将此类地址的所有片段放在一起,我的意思是,记住一个完整的地址是由该格式的几个字段组成的,例如:line1
, line2
, postcode
, country
, 等...
或者 ...
您可以在表单的方法中使用Python
+ Python Client for Google Maps Services进行验证。clean
您必须记住,表单无效,无法为用户设置正确的消息,说明原因。
如果验证失败,您将重定向到哪个页面取决于您。