我有一个已经存在的 Django 应用程序。我想添加一个系统,将数据从我的 Django 应用程序发送到托管在另一台服务器上的另一个 Python 应用程序,以便 Python 应用程序可能以 json 格式从 Django 应用程序接收数据。
因此,例如,我需要创建一个视图,每隔几秒将数据从数据库表发送到此应用程序,或者在点击表单时,将数据发送到此外部应用程序。
我怎样才能做到这一点?是否有针对此特定问题的示例?我不知道我需要使用什么工具来创建这个系统,我只知道我需要使用 Celery 来执行异步任务,但没有别的;我应该使用 Webhooks 吗?还是 Django 频道?
编辑:添加更多上下文:我有我的 Django 客户端。然后我在另一台服务器上运行了一两个 Python 应用程序。在我的 Django 客户端上,我有一些表单。提交表单后,数据将保存在数据库中,但我也希望将此数据立即发送到我的 Python 应用程序。Python 应用程序应该从 Django 接收 Json 格式的数据,并根据用户提交的值执行一些任务。然后应用程序应该向 Django 发送响应。
来吧!我将在 Flask 或其他框架中将您的 Django 应用程序称为“DjangoApp”,并将您的 Python 应用程序称为“OtherApp”。
首先,正如您预测的那样,您将需要一个能够执行g 任务的框架,新的 **Django 3.0允许这样做,但我还没有使用它......我将向您传递一些您正在使用的完整内容与 Django 2.8 和 Python 3.8 一起使用**。
在您的 DjangoApp 服务器上,您需要与 Celery 建立良好的通信结构,让我们将任务留给他。您可以阅读Celery Docs和这篇文章,制作这种架构非常好。
不管你的表单或者 Django App 看起来如何,当你想让它在 celery 中激活一个任务时,它基本上是在后台传输数据的功能。
from .tasks import send_data
...
form.save()
# Create a function within the form to get the data the way you want it
# or do it the way you want.
values = form.new_function_serializedata()
send_data.delay(values) # [CALL CELERY TASKS][1]
...
Run Code Online (Sandbox Code Playgroud)
在所有其他应用程序中,您需要有一个 POST 路由来接收和序列化这些数据,使用Pyramid 之类的轻量级框架执行此操作
这样,每次提交表单时,您都会在 send_data 函数中将此数据发送到服务器。
根据我的经验,但对您的问题不太了解,我会使用类似的架构,但使用Celery Beat。
CELERY_BEAT_SCHEDULE = {
'send_data': {
'task': 'your_app.tasks.send_data',
'schedule': crontab(), # CONFIGURE YOUR CRON
},
}
Run Code Online (Sandbox Code Playgroud)
不仅添加了上面的代码,而且是这样的。
在您的模型中,我将为sent创建一个字段。每 2 秒、10 秒 .. 只要我希望我用 send = false 过滤所有对象,并为 send_data 任务传递所有对象。
我不知道你是否感到困惑,要解释的太多了。但我希望我能帮助和回答你的问题。
import requests
from django import http
def view(request):
url = 'python.app.com' # replace with other python app url or ip
request_data = {'key': 'value'} # replace with data to be sent to other app
response = requests.post(url, json=request_data)
response_data = response.json() # data returned by other app
return http.JsonResponse(response_data)
Run Code Online (Sandbox Code Playgroud)
这是一个基于函数的视图示例,它使用请求库来访问外部服务。请求库负责将数据与 json 进行编码/解码。
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |