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

Django视图传递Token报错:View.__init__参数不匹配问题排查

问题排查与解决方案

报错根源

Django 类视图(继承自View)的__init__方法默认仅接受self这一个位置参数,你在实例化Info类时直接传入Token作为位置参数,超出了方法定义的参数数量,因此触发View.__init__() takes 1 positional argument but 2 were given错误。

解决方案

要将Token传递到Info类get_info方法的create_client函数中,推荐以下几种可行方式:

1. 通过类属性传递(最简便)

实例化视图类后,直接为其添加Token属性,再调用目标方法:

# ProxyAPI中的代码
token = 从数据库获取的Token值
info_view = Info()
info_view.token = token
# 调用get_info方法
info_view.get_info()

在Info类中读取该属性:

class Info(View):
    def get_info(self):
        # 直接使用实例的token属性
        client = create_client(self.token)
        # 后续业务逻辑

2. 重写__init__方法接收Token(需兼容Django视图机制)

如果需要在实例化时传入Token,必须重写__init__并确保调用父类的初始化方法,避免破坏Django视图的原有逻辑:

class Info(View):
    def __init__(self, token=None, **kwargs):
        self.token = token
        # 必须调用父类__init__,传递所有关键字参数
        super().__init__(**kwargs)

    def get_info(self):
        client = create_client(self.token)
        # 后续业务逻辑

实例化时使用关键字参数传递Token:

# ProxyAPI中的代码
token = 从数据库获取的Token值
info_view = Info(token=token)
info_view.get_info()

3. 直接将Token作为方法参数传递

如果get_info是手动调用的内部方法,可直接把Token作为参数传入:

# ProxyAPI中的代码
token = 从数据库获取的Token值
info_view = Info()
info_view.get_info(token=token)

在Info类中接收参数:

class Info(View):
    def get_info(self, token):
        client = create_client(token)
        # 后续业务逻辑

注意事项

Django类视图的设计初衷是通过URL路由触发调用,手动实例化调用内部方法时,尽量避免修改视图类的__init__参数结构,优先使用类属性或方法参数传递数据,防止与Django的视图生命周期机制冲突。

内容的提问来源于stack exchange,提问作者user3521180

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:22:52