我怎么能在1小时后删除数据库中的数据?

问题描述 投票:0回答:1

嗨,大家好我已经在我的数据库使用Django保存用户的IP地址,但我想一小时后删除该IP地址。请告诉我,我该怎么Django中做到这一点。

我的表名是iptable。在我的IP表2列 - 1是ip_adress和2是保存数据的date_time。我怎样才能从我的数据库一小时后删除,请告诉我。

提前致谢。如果您需要了解我的代码的任何信息,请告诉我,我将提供它在我的评论部分。

django
1个回答
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()
© www.soinside.com 2019 - 2024. All rights reserved.