You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:18:00