大家好,我已经使用django在数据库中保存了一个用户ip地址,但是我想在一小时后删除该ip地址。请告诉我如何在Django中执行此操作。
我的表名是iptable
。在我的ip表的2列中-1是ip_adress
,2是date_time
保存的数据。一小时后如何将其从数据库中删除?
先谢谢了。如果您需要有关我的代码的任何信息,请告诉我,我将在我的评论部分中提供它。
答案 0 :(得分:0)
正如评论中提到的那样,此类任务应使用调度程序执行。您可以为此使用Celery或使用不需要安装消息队列服务器的简单库,例如Django-Apscheduler。
使用django-apscheduler的非常简化的示例:
# tasks.py
from datetime import datetime, timedelta
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_events, register_job
scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")
@register_job(scheduler, "interval", seconds=3600)
def delete_ip():
for record in IpTable.objects.all()
# I assumed here that date_time is time when your object was created
time_elapsed = datetime.now() - record.date_time
if time_elapsed > timedelta(hours=1):
record.delete()
register_events(scheduler)
您可以在urls.py
文件中启动调度程序:
from django.urls import path
from . import views
# import module with your task
from yourapp.tasks import scheduler
urlpatterns = [
path('', views.index, name='index'),
# ex: /polls/5/
path('<int:question_id>/', views.detail, name='detail'),
# ex: /polls/5/results/
path('<int:question_id>/results/', views.results, name='results'),
# ex: /polls/5/vote/
path('<int:question_id>/vote/', views.vote, name='vote'),
]
scheduler.start()