Django中不使用AJAX能否直接跳转至Stripe Checkout支付页面?
实现方案
不使用JavaScript完全可以实现该需求,核心逻辑是表单提交验证通过后,服务端直接返回302重定向响应指向Stripe Checkout的官方地址即可,具体修改如下:
方法1:调整现有表单逻辑,透出Stripe跳转地址
你当前把Stripe会话创建放在表单save方法中的逻辑无需大幅修改,只需要把生成的Checkout地址暴露给视图层即可:
from django.http import HttpResponseRedirect class ApplicationForm(forms.ModelForm): class Meta: model = Application fields = "email", "name" def save(self, commit=True): application = super().save(commit=commit) checkout_session = stripe.checkout.Session.create( # 原有Stripe会话配置参数,需提前配置好success_url和cancel_url ) # 将Stripe跳转地址挂载到application实例上,供视图层获取 application.stripe_checkout_url = checkout_session.url return application class ApplicationView(CreateView): template_name = "application.html" form_class = ApplicationForm # 无需使用get_success_url,重写form_valid方法直接处理重定向 def form_valid(self, form): self.object = form.save() # 直接重定向到Stripe官方支付页面,全程无JS依赖 return HttpResponseRedirect(self.object.stripe_checkout_url)
方法2:把Stripe会话创建逻辑移到视图层(更推荐,职责更清晰)
如果不想修改表单原有逻辑,可以直接把Stripe会话创建放到视图的form_valid方法中:
from django.http import HttpResponseRedirect class ApplicationView(CreateView): template_name = "application.html" form_class = ApplicationForm def form_valid(self, form): self.object = form.save() # 在视图层创建Stripe Checkout会话 checkout_session = stripe.checkout.Session.create( # 传入所需配置参数,可直接读取self.object的表单字段值使用 ) return HttpResponseRedirect(checkout_session.url)
注意事项
- 创建Stripe Checkout Session时必须正确配置
success_url和cancel_url,分别对应支付完成、支付取消后跳转回你站点的地址 - 该方案是纯服务端重定向,用户提交表单后会直接跳转至Stripe官方支付页面,全程不需要任何前端JavaScript参与
内容的提问来源于stack exchange,提问作者Johannes Pertl
相关产品推荐
相关产品推荐

