如何调用从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 通常是个好主意,因为在处理您的函数时数据可能会发生变化,如果您传递整个数据,您可能会得到旧数据。
我正在尝试这个:但是它引发了 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 通常是个好主意,因为在处理您的函数时数据可能会发生变化,如果您传递整个数据,您可能会得到旧数据。