如何调用从views.py到tasks.py的函数?

How to call a function from views.py to tasks.py?

我正在尝试这个:但是它引发了 TypeError: auto_sms() missing 1 required positional argument: 'request' 错误。

现在我正在考虑从 views.py 获取函数并在 tasks.py 上调用它,如果 requests 在 tasks.py 上不起作用,我该怎么做它?谢谢!

@shared_task
def auto_sms(request):
    responses = Rainfall.objects.filter(
        level='Torrential' or 'Intense',
        timestamp__gt=now() - timedelta(days=1),
    )

    count = responses.count()
    if not (count % 10) and count > 0:
        send_sms(request)

    return

传递整个 request 可能不是一个好主意,因为它可能包含 Django 模型对象,例如用户对象。现在您将面临的问题是,如果有一个不可序列化的对象,那么您将在调用该函数时遇到错误。因此,不要传递整个 request,只需发送您实际需要的数据即可。

例如,我猜您需要这里的用户向其发送短信。因此,与其传递包含用户对象的整个请求,不如发送 user_id 然后让用户到达那里。基本上,您必须确保您传递的数据是可序列化的。

传递 Django 模型的 ID 通常是个好主意,因为在处理您的函数时数据可能会发生变化,如果您传递整个数据,您可能会得到旧数据。