Django项目集成Stripe出现TypeError报错如何解决
Django集成Stripe报错解决及完整配置步骤
当前报错解决方案
你遇到的TypeError: __init__() takes 1 positional argument but 2 were given错误,是Django类视图注册时的常见问题,按以下两步修复:
- 第一步:修改
payment/urls.py中的路由注册逻辑,Django基于类的视图必须调用.as_view()方法才能转为可调用的视图处理函数,修改后对应代码如下:
from django.urls import path, include from . import views app_name ='payment' urlpatterns = [ # 新增.as_view()调用 path('create-checkout-session/',views.Create_checkout_session.as_view(), name='create-checkout-session') ]
- 第二步:你当前直接在浏览器输入地址访问属于GET请求,但视图中只定义了post方法,修复后访问会出现405方法不允许的错误。你需要在前端页面添加POST提交按钮触发该接口,若需要临时测试可在视图类中新增get方法调用post逻辑。
其余Stripe集成必备配置
完成以上修复后,还需要做以下配置才能正常跑通支付流程:
- 替换真实商品Price ID:代码中
'price': 'price_id'需要替换为你在Stripe后台创建商品后生成的对应Price ID,否则会触发参数无效报错。 - 补全成功/取消页面对应逻辑:当前代码中
success_url和cancel_url对应的路径需要新增对应路由和视图,返回支付成功、支付取消的提示页面。 - 配置CSRF豁免(按需选择):如果前端使用Stripe官方组件异步调用该支付接口,需要给类视图添加CSRF豁免装饰器,避免Django CSRF校验拦截请求,示例代码如下:
from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt @method_decorator(csrf_exempt, name='dispatch') class Create_checkout_session(View): # 原有代码保持不变
- 生产环境域名替换:站点上线时需要把代码中的
DOMAIN = "http://127.0.0.1:8000"替换为你的站点正式域名。 - 可选配置Webhook回调:如果需要接收Stripe推送的支付状态通知,需要在Stripe后台配置webhook回调地址,项目中新增对应回调视图,校验Stripe签名后处理支付成功后的业务逻辑(如修改订单状态、触发发货流程等)。
内容的提问来源于stack exchange,提问作者Yuhan Chang
相关产品推荐
相关产品推荐

