【发布时间】:2020-11-08 18:07:23
【问题描述】:
我的views.py上有这个函数,我需要在运行python manage.py runserver后自动运行它,一个人说我必须在settings.py上运行那个函数。我试过了,但我无法将视图和模型导入到我的 settings.py 中(可能是因为我是菜鸟?)所以我不能按照他的建议去做。
这是过程,我有一个切换按钮,用于在我的前端 javascript(vuejs) 上启用和禁用 auto_sms 功能。
如果我选择enable,它将通过 axios 调用auto_sms 的 API 端点。就像在 while 循环中执行此操作一样,每 30 分钟检查一次,然后重复直到执行然后重置。等待另一个条件有效。 responses.count()
如果我选择 disable,它将通过 axios 调用 disable_sms 的 API 端点(我还没有开始编码)。就像如果它检测到auto_sms is true 然后将其设为假。
我想问,我对我的申请的想象是否可能发生?
@models.py
class Rainfall(models.Model):
level = models.CharField(max_length=10, blank=True, default='')
amount = models.FloatField()
timestamp = models.DateTimeField(auto_now_add=True)
def update_level(self):
if 0.1 <= self.amount < 2.5:
return 'Light'
elif 2.5 <= self.amount < 7.5:
return 'Moderate'
elif 7.5 < self.amount < 15:
return 'Heavy'
elif 15 <= self.amount < 30:
return 'Intense'
elif 30 <= self.amount < 50:
return 'Torrential'
def save(self, *args, **kwargs):
if not self.level:
self.level = self.update_level()
super().save(*args, **kwargs)
class Sms(models.Model):
description = models.CharField(max_length=100, blank=True)
timestamp = models.DateTimeField(auto_now_add=True)
@views.py
def send_sms(request):
z = Rainfall.objects.latest('timestamp')
numbers = Mobile.objects.all()
message = (f'Test: ({z.timestamp})')
account_sid = '**********'
auth_token = '*********'
client = Client(account_sid, auth_token)
for i in numbers:
client.messages.create(to=i.mobile_number,
from_='********',
body=message)
record = Sms.objects.create(description=f'{message}')
record.save()
return HttpResponseRedirect('/home/', 200)
def auto_sms(request):
responses = Rainfall.objects.filter(
level='Torrential' or 'Intense',
timestamp__gt=now() - timedelta(days=1),
)
if responses.count() >= 5:
send_sms(request)
return HttpResponse(200)
【问题讨论】:
-
即使没有用户处于活动状态,您是否需要在后台定期运行任务?
-
是的,完全正确。我该怎么做?
标签: django vue.js django-rest-framework