我已经编写了一个中间件,我想对如何改进代码提出一些建议。我有一个模型,可以在创建日期和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的链接时都可以添加一列?还是其他更好的方法?
当然非常感谢您的帮助!
答案 0 :(得分:1)
You could use redis instead of an actual model for this and in conjunction with the HSET
and HGET
commands you could do the following:
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)