我正在编写一个小应用程序,用户在其中创建事件并指定事件发生的日期.事件日期过去后,我想删除该事件实例.我当前的尝试是抛出一个函数,检查事件是否应该在事件页面视图中到期.我不确定expiration_check函数是否正在以正确的方式进行检查,也不确定在视图中是否只有一个函数才能正常工作.
这是我的观点和过期功能:
def event_page(request, name):
event = Event.objects.get(name=name)
check_expiration(event)
if request.method == "POST":
form = GuestForm(request.POST)
if form.is_valid():
Guest = form.save(commit=False)
Guest.event = event
Guest.save()
return redirect(event)
else:
form = GuestForm()
return render(request, "event_page.html", {"form": form, "event": event, })
def check_expiration(event):
now = datetime.datetime.now()
if event.date < now: #if the event date has past
event.delete()
Run Code Online (Sandbox Code Playgroud)
我从用户那里收集日期并将其存储在DateTime字段中:date = models.DateField()
如果需要进一步的细节,请告诉我.非常感谢,谢谢!
sup*_*cuo 15
如果您在UNIX平台(GNU/Linux,OSX 等)上托管您的应用程序,最好使用cron
通用系统实用程序来定期运行.
这需要将您的到期代码实现为自定义管理命令:
如果您还没有任何自定义管理命令,请创建以下目录结构:
yourapp/
management/
__init__.py (blank)
commands/
__init__.py (blank)
expire_events.py
Run Code Online (Sandbox Code Playgroud)在expire_events.py
,按照以下方式创建一个新类:
from django.core.management.base import NoArgsCommand
class Command(NoArgsCommand):
help = 'Expires event objects which are out-of-date'
def handle_noargs(self):
print Event.objects.filter(date__lt=datetime.datetime.now()).delete()
Run Code Online (Sandbox Code Playgroud)现在,您应该可以运行./manage.py expire_events
并删除过去已过期日期的任何事件.
要定期运行cron
(这些说明适用于GNU/Linux,但可能适用于其他UNIX变体),请运行sudo crontab -e
并添加以下行:
*/5 * * * * /path/to/your/django/app/manage.py expire_events
Run Code Online (Sandbox Code Playgroud)
(这将每5分钟运行一次任务; 有关指定作业运行时间的建议,请参阅crontab文档)
归档时间: |
|
查看次数: |
5027 次 |
最近记录: |