Python 改进代码:在中间件中单击时显示url的日期时间

Python 改进代码:在中间件中单击时显示url的日期时间,python,django,url,django-models,Python,Django,Url,Django Models,我已经编写了一个中间件,我想就如何改进代码提出一些建议。我有一个模型,它在创建新实例时保存日期和url(在中间件中,因此每次访问url时) 像这样: 中间件: class GetUrlMiddleware(): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): # before view url

我已经编写了一个中间件,我想就如何改进代码提出一些建议。我有一个模型,它在创建新实例时保存日期和url(在中间件中,因此每次访问url时)

像这样:

中间件:

class GetUrlMiddleware():
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # before view

     urltime = UrlTime.objects.create(associated_url=request.path)
     urltime.save()

        response = self.get_response(request)
        # after view

        return response

型号:

class UrlTime(models.Model):
    url_track_model = models.ForeignKey(UrlTrack, blank=True, null=True, on_delete=models.CASCADE)
    associated_url = models.CharField(blank=True, null= True, max_length=250)
    timestamp = models.DateTimeField('Url viewed on: ',default=datetime.now, blank=True)

现在,每次单击链接时,都会创建一个新对象,其中包含url和日期。一切正常

我觉得这可以做得更好。例如,是否有一种方法可以让我在每次单击带有url的链接时添加一列?或者其他更好的方法

当然非常感谢您的帮助,提前谢谢

您可以使用替代实际模型来进行此操作,并结合
HSET
HGET
命令,您可以执行以下操作:

from datetime import datetime

current_hits = redis_client.hget("links_hits", request.path) or []
current_hits.append(datetime.now())
redis_client.hset("links_hits", request.path, current_hits)

你需要保存它吗?谢谢你的提示!但是,是的,我必须承认我从未与redis合作过,但我会检查一下。非常感谢我的朋友!您认为redis在性能和高流量方面会是一个更轻量级的解决方案吗?@Micromegas因为它是一个内存中的“数据库”,读写速度要比使用经典的RDBMS快得多。有关该主题的更多信息,请参阅