以Django模型保存和更新API请求?

时间:2014-07-21 07:57:18

标签: python django steam

我目前正在使用Steam API来获取玩家详细信息,游戏库存等。我在尝试提供有关如何保存非常昂贵的API请求的解决方案时遇到了一些困难。

我正在使用

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

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

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

我有很多问题:

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

  2. 接下来,如何在更新后更新对项目架构所做的任何更改?

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

  4. 谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

其次,当有更新时,会有一个请求。一旦收到此请求,您就可以解析它,然后将其保存到数据库中。这可以在您获得更新请求的地方完成。 第三,我认为有两种方法。一个就像你说的,使用URL。另一个是直接调用更新功能。这是Python,对吗?您可以根据需要调用任何功能。

希望它有所帮助。

答案 1 :(得分:0)

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

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

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

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