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并发出一个将在数据库中创建冠军的请求。我已经编写了用于执行此操作的代码,但我不知道将这些代码放在哪里或如何访问它。
换句话说,您有一些远程API和本地django支持的站点。您不想在每个请求中都从远程API提取数据,因此希望将其存储在本地。在这种情况下,您需要将数据与远程数据同步,问题是:如何开始同步。
您有一些可能,但首先应该考虑何时要运行同步:
如果要在数据更改时或一段时间后进行同步,则需要再回答一个问题:同步如何影响请求?是否可以在请求期间处理同步,或者是否可以在同步期间调用请求仍返回旧数据?
如果您决定根据要求进行同步-您只需将同步代码放在自定义管理命令中或放入单独的视图(仅授权访问)即可运行同步。
如果可以在正常请求期间进行同步,则可以检查每个请求中上次同步的时间是否大于X,是否更新了远程API上的数据,或者是否满足其他条件,然后仅在返回响应之前运行同步(请注意比赛条件!)。
如果您不想在请求期间执行此操作(同步发生时发出的请求仍在返回旧数据是可以的),则可以使用celery或系统cron作业。
Celery可以按需运行任务(例如,在请求中,当您检查远程数据是否已更改时,可以运行异步任务以执行同步并根据旧数据返回响应)或定期运行任务(例如cron作业)。对于常规的cron任务,您可以仅使用自定义管理命令,如上所述。
归档时间: |
|
查看次数: |
2860 次 |
最近记录: |