【问题标题】:Saving and updating API request as Django Model?将 API 请求保存和更新为 Django 模型?
【发布时间】:2014-07-21 07:57:17
【问题描述】:

我目前正在使用 Steam API 来获取玩家详细信息、游戏库存等。我在想出一个解决方案来解决如何保存非常昂贵的 API 请求时遇到了一点困难。

我正在使用

获取特定游戏 (DOTA2) 的整个项目架构

http://api.steampowered.com/IEconItems_570/GetSchema/v0001/

这是一个非常昂贵的请求,因此我需要将其存储在数据库中,以便获取与特定用户库存相关的项目详细信息。

我有几个问题:

  1. 如何将所有这些信息保存在数据库中?我需要吗 手动创建模型,然后过滤并保存数据?如果是这样,我该如何实际执行此操作?(即我会在 models.py 中的模型级别执行此操作还是在视图中执行此操作?)

  2. 接下来,当进行更新时,我将如何更新对项目架构所做的任何更改?

  3. 在上述 Q2 的情况下,如何制作仅在需要更新数据库时才能运行的脚本。我能想到的一种方法是设置一个 URL,当访问该 URL 时会启动更新,但我不确定这是否是最好的。

谢谢!

【问题讨论】:

    标签: python django steam


    【解决方案1】:

    你的问题真的很大。 首先,您必须在 settings.py 中设置数据库信息,以便将所有信息保存到数据库中。您必须在 models.py 中设置字段才能将所有值恢复到数据库。例如,

    ...
    name = models.CharField(max_length=20,blank=True,verbose_name='your name')
    ...
    

    第二,有更新就有请求。收到此请求后,您可以对其进行解析,然后将其保存到数据库中。这可以在您收到更新请求的地方完成。 第三,我认为有两种方式。一个就像你说的,使用 URL。另一种是直接调用更新函数。这是 Python,对吧?您可以根据需要调用任何函数。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      第一个问题的答案取决于您希望如何处理历史数据。如果您不关心 API 中的历史值(例如,武器在昨天和今天之间是否发生了属性变化)而只关心当前值(例如,该武器现在的属性是什么),那么你可以简单地缓存你的结果。

      这种缓存可以通过多种方式完成,但最简单的方法是将整个 API 结果保存到本地数据库。这也有效地解决了您的第二个问题-您如何更新它?您提取新的 API 模式并保存它。您不必担心解析模式的所有方面,只需更新适当的内容。您还可以避免意外的架构更改,因为您只需保存整个内容。

      如果您需要历史数据,则需要解析响应。您必须对整个架构进行建模并为系统中的值加上时间戳。每次检查更新时,您都必须在系统中添加一个新条目。绝大多数模式在更新之间不会改变。如果您不处理未更改的数据(即质量、原产地名称、item_levels 以及大多数项目本身不会受到任何给定更新的影响),您会发现很多数据是重复的。

      您对选项 3 的建议是一个有效的想法,尽管它需要某人(可能是您)手动访问。不过,这可能是最容易实现的。

      【讨论】:

        猜你喜欢
        • 2023-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-09
        • 2020-11-20
        • 1970-01-01
        • 2019-05-31
        • 2019-04-22
        相关资源
        最近更新 更多