首页 > 解决方案 > Django Steam API 的“列表索引超出范围”

问题描述

我正在 Django 中开发一个应用程序,它可以让您在输入 Steam 用户 ID 时查看有关 Steam 用户的信息。

我正在使用在此链接中找到的 Django Steam API:https ://pypi.org/project/django-steam-api/ ,不幸的是,它没有提供有关如何正确设置它的一些文档/足够的帮助。

我从那里按照步骤操作。安装了 pip 包,添加django-steam-apiINSTALLED_APPS元组中,STEAM_API_KEY从他们的官方站点(在“localhost”上,因为我的 web 应用程序目前没有托管)生成一个,还通过应用当前迁移更新了数据库。

我有一个视图backend/views.py,(backend是我使用命令创建的应用程序名称django-admin startapp backend),它从包含steam_user_id使用该POST方法调用的文本框的表单中获取数据。

我正在尝试从 Steam 获取有关具有 id 的用户的所有信息steam_user_id,但是当我在视图内部调用该方法时:

Player.objects.steam_create(steam_user_id)

(...) 我在我的页面上收到以下错误:

{{ /link_to_my_view/ 处的 IndexError - 在此处手动替换它以避免并发症}} 列表索引超出范围请求方法:POST 请求 URL:http: //127.0.0.1 :8000/profile/edit/Django 版本:3.2.7 异常类型:IndexError 异常值:列表索引超出范围异常位置:C:\Users\matea\AppData\Local\Programs\Python\Python39\lib\site-packages\django_steam_api\managers.py,第 21 行,在 steam_create Python 可执行文件:C:\Users\matea\AppData\Local\Programs\Python\Python39\python.exe Python 版本:3.9.7 Python 路径:['E:\git\gameprofile', 'C: \Users\matea\AppData\Local\Programs\Python\Python39\python39.zip', 'C:\Users\matea\AppData\Local\Programs\Python\Python39\DLLs', 'C:\Users\matea\AppData \Local\Programs\Python\Python39\lib', 'C:\Users\matea\AppData\Local\Programs\Python\Python39', 'C:\Users\matea\AppData\Local\Programs\Python\Python39\lib \site-packages'] 服务器时间:2021 年 10 月 30 日星期六 22:09:37 +0000

Traceback 指向包含Player.objects.steam_create(list(steam_user_id)) .

我做错了什么?我也尝试转换steam_user_id为列表 ( list(steam_user_id)),但它仍然不起作用。

有什么意见或解决办法吗?帮助将不胜感激。谢谢你。

标签: pythondjangopip

解决方案


我建议你不要使用这个包,如果你是唯一的用户(可能是你),可能会出现问题,如果你绝对需要使用这个包,那么在 github 中打开一个问题可能会更合适如果你检查源代码你会看到这个 Django Steam API 有什么问题。给你错误的方法在这里https://github.com/voblivion/django-steam-api/blob/master/django_steam_api/managers.py

在我看来,这确实是不必要的包 STEAM_API_KEY 变量可能是问题所在

def steam_query(self, url, params={}):
    params['key'] = settings.STEAM_API_KEY
    raw_data = requests.get(url, params)
    data = raw_data.json()
    return data['response']

当您尝试通过 shell 运行此代码时,它是否有效?顺便说一句,只需阅读所有的包文件,它实际上真的很小,最好是在你的项目中实现和修复问题。


推荐阅读