Python 使用Django中的API调用创建新模型实例

Python 使用Django中的API调用创建新模型实例,python,django,Python,Django,我不确定如何在Django应用程序中解决这个问题: 我需要每隔n天调用一个API。我可以通过Python调用并获取所需的数据,但是我应该把代码放在哪里呢 我是否将代码放在一个特定的视图中,然后将视图映射到一个URL,并在我希望基于API调用创建新模型实例时调用该URL 还是我的做法不对?听起来你想找一份有计划的工作。在这种情况下效果很好 您将创建一个每N天运行一次的任务。在该任务中,您将放置调用API的代码,并根据需要处理响应 参考: 听起来你想找一份有计划的工作。在这种情况下效果很好 您将创建

我不确定如何在Django应用程序中解决这个问题:

我需要每隔
n
天调用一个API。我可以通过Python调用并获取所需的数据,但是我应该把代码放在哪里呢

我是否将代码放在一个特定的
视图中
,然后将视图映射到一个URL,并在我希望基于API调用创建新模型实例时调用该URL


还是我的做法不对?

听起来你想找一份有计划的工作。在这种情况下效果很好

您将创建一个每N天运行一次的任务。在该任务中,您将放置调用API的代码,并根据需要处理响应

参考:

听起来你想找一份有计划的工作。在这种情况下效果很好

您将创建一个每N天运行一次的任务。在该任务中,您将放置调用API的代码,并根据需要处理响应

参考:

我通常的做法是结合使用定制,然后使用预定的

您可以使用与运行默认命令相同的方式运行自定义命令:

python manage.py <your_command_name> <your_command_arguments>
python manage.py

我通常的做法是结合使用定制,然后使用预定的

您可以使用与运行默认命令相同的方式运行自定义命令:

python manage.py <your_command_name> <your_command_arguments>
python manage.py
我是否将代码放在特定视图中

django
视图
是一个可调用的视图,它必须接受HTTP请求并返回HTTP响应,因此,除非您需要能够通过HTTP调用代码,否则使用视图毫无意义,即使您希望视图公开此代码,也不意味着执行API调用等的代码必须存在于视图中

请记住,“django应用程序”基本上是一个Python包,因此除了django特定的东西(视图、模型等)之外,您还可以放置您想要的任何模块,并让您的视图、自定义命令等调用这些模块。因此,只需为API客户机等编写一个模块,其中一个函数执行fetch/create model instance/which作业,然后在有意义的地方调用该函数(view、cron作业调用的自定义命令、芹菜任务等等)

我是否将代码放在特定视图中

django
视图
是一个可调用的视图,它必须接受HTTP请求并返回HTTP响应,因此,除非您需要能够通过HTTP调用代码,否则使用视图毫无意义,即使您希望视图公开此代码,也不意味着执行API调用等的代码必须存在于视图中


请记住,“django应用程序”基本上是一个Python包,因此除了django特定的东西(视图、模型等)之外,您还可以放置您想要的任何模块,并让您的视图、自定义命令等调用这些模块。因此,只需为API客户机等编写一个模块,其中一个函数执行fetch/create model instance/which作业,然后在有意义的地方调用该函数(view、cron作业调用的自定义命令、芹菜任务等等)

我想这可能会以“主要基于意见”的方式结束。如果您搜索“django cron”,您会发现很多解决方案,从从crontab运行管理命令(
manage.py cron
)到使用芹菜添加完整的定期任务。您的解决方案本质上是webcron。什么对您最有利取决于您的应用程序需求和托管环境。但是,如果我使用其中一种解决方案,我是否应该编写一个特定的视图,基本上创建我试图创建的模型的新实例?将定期操作放入服务层,并可能显式地将其包装为获取事务安全性。该视图仅适用于webcron。芹菜和crontab命令不会向web公开任何内容。我想这可能会被关闭为“主要基于意见”。如果您搜索“django cron”,您会发现很多解决方案,从从crontab运行管理命令(
manage.py cron
)到使用芹菜添加完整的定期任务。您的解决方案本质上是webcron。什么对您最有利取决于您的应用程序需求和托管环境。但是,如果我使用其中一种解决方案,我是否应该编写一个特定的视图,基本上创建我试图创建的模型的新实例?将定期操作放入服务层,并可能显式地将其包装为获取事务安全性。该视图仅适用于webcron。芹菜和crontab命令不会向web公开任何内容。芹菜很好,但我更关心的是逻辑本身到底应该放在哪里。在特定视图中,是否仅用于调用API调用和更新数据库?我是否通过从我创建的视图创建模型的新实例来更新数据库?@AdamThompson,您将创建一个tasks.py文件,并将代码放入定义的任务中。然后,您将在您的设置中为该任务创建一个时间表,芹菜节拍将根据您的时间表负责运行该任务。如果要从视图手动调用任务,也可以这样做。阅读芹菜文档,尝试一下,然后带着进一步的问题回来。芹菜是好的,但我更关心的是,逻辑本身到底应该放在哪里。在特定视图中,是否仅用于调用API调用和更新数据库?我是否通过从我创建的视图创建模型的新实例来更新数据库?@AdamThompson,您将创建一个tasks.py文件,并将代码放入定义的任务中。然后,您将在您的设置中为该任务创建一个时间表,芹菜节拍将根据您的时间表负责运行该任务。如果要从视图手动调用任务,也可以这样做。读一下芹菜的文档,试试看,然后再来