使用来自API的数据填充Django数据库获取请求

Cal*_*YSR 4 python django get-request

我的项目围绕发出API请求(获取JSON)并从这些请求输出信息而构建。60-80%的请求正在请求很少更改的静态数据。我想以这种方式将这些静态数据存储在数据库中,而不必将所有请求都花在该静态数据上。

我已经建立了一个模型,其中将保存仅来自那些请求之一的所有信息。我不知道在哪里放置任何代码,用我的请求中的信息实际填写该数据库。

模型

 class Champion(models.Model):
     id = models.IntegerField(primary_key=True)
     name = models.CharField(max_length=100)
     title = models.CharField(max_length=255)
     image = models.CharField(max_length=5000)
     ...
Run Code Online (Sandbox Code Playgroud)

基本上,我知道我需要发出2个请求,一个要获取我的所有ID,然后遍历那些ID并发出一个将在数据库中创建冠军的请求。我已经编写了用于执行此操作的代码,但我不知道将这些代码放在哪里或如何访问它。

Gwy*_*idD 5

换句话说,您有一些远程API和本地django支持的站点。您不想在每个请求中都从远程API提取数据,因此希望将其存储在本地。在这种情况下,您需要将数据与远程数据同步,问题是:如何开始同步。

您有一些可能,但首先应该考虑何时要运行同步:

  • 每天/每小时/每周/每月?
  • 手动/应要求提供?
  • 何时更改数据(远程API上的某些方法,请检查最后的修改)?

如果要在数据更改时或一段时间后进行同步,则需要再回答一个问题:同步如何影响请求?是否可以在请求期间处理同步,或者是否可以在同步期间调用请求仍返回旧数据?

如果您决定根据要求进行同步-您只需将同步代码放在自定义管理命令中或放入单独的视图(仅授权访问)即可运行同步。

如果可以在正常请求期间进行同步,则可以检查每个请求中上次同步的时间是否大于X,是否更新了远程API上的数据,或者是否满足其他条件,然后仅在返回响应之前运行同步(请注意比赛条件!)。

如果您不想在请求期间执行此操作(同步发生时发出的请求仍在返回旧数据是可以的),则可以使用celery或系统cron作业。

Celery可以按需运行任务(例如,在请求中,当您检查远程数据是否已更改时,可以运行异步任务以执行同步并根据旧数据返回响应)或定期运行任务(例如cron作业)。对于常规的cron任务,您可以仅使用自定义管理命令,如上所述。