Python Django检查运行时间

Python Django检查运行时间,python,django,Python,Django,我正在用Django编写一个URL缩短器应用程序。我想检查URL是否过期(URL仅在3小时内有效)。下面是我的models.py,但它不工作 我遇到错误无法减去datetime对象 import uuid import base64 import datetime from django.db import models from django.contrib import admin #------------------------------------------------------

我正在用Django编写一个URL缩短器应用程序。我想检查URL是否过期(URL仅在3小时内有效)。下面是我的models.py,但它不工作 我遇到错误
无法减去datetime对象

import uuid
import base64
import datetime
from django.db import models
from django.contrib import admin
#------------------------------------------------------------------------------ 

def _generateShortUrl():
    """
        This function will generate base64 encoded id
    """
    return base64.urlsafe_b64encode(uuid.uuid1().bytes)[:6]


class link(models.Model):
    """
        This is a link class 
    """
    link = models.URLField()                                    # To store user entered URL
    hits = models.IntegerField(default=0)                       # How many hits for particular URL
    last_used = models.DateTimeField(auto_now=True)             # When URL is last used 
    short_url = models.CharField(max_length=6,unique=True)      # base64 URL encoded id  

    def linkValidate(self):
        timediff = datetime.datetime.now() - self.last_used                       
        return timediff.min

    def save(self, *args, **kwargs):
        """
            Custom Save method for link model 
        """
        self.short_url = _generateShortUrl()        
        super(link, self).save(*args, **kwargs)   


class user_info(models.Model):
    """
        This is a user_info class 
    """
    user_agent = models.TextField()                 # Stores user_agent name used by user
    user_ip = models.ManyToManyField(link)          # Stores user's IP

    def userIP(self):
        """Method to return tags related to store"""
        return ','.join([t.link for t in self.link.all()])

#------------------------------------------------------------------------------ 

class linkAdmin(admin.ModelAdmin):
    """
        link admin class
    """
    list_display = ('link','hits','short_url','last_used',
                    'linkValidate')
    ordering = ('hits',)

class userInfoAdmin(admin.ModelAdmin):
    """
        user_info admin class
    """
    list_display = ('user_agent','userIP')

#------------------------------------------------------------------------------ 
admin.site.register(link,linkAdmin)
admin.site.register(user_info,userInfoAdmin)

有人能帮我吗。

既然您启用了时区支持,
self.last\u使用的是一个时区感知的datetime对象,
datetime.datetime.now()不是

请尝试以下方法:

timediff = datetime.datetime.utcnow() - self.last_used.replace(tzinfo=None)
另一个选项是使用
make_aware()
使您的
now()
时区感知:

另见:


由于启用了时区支持,
self.last\u使用的
是一个时区感知的日期时间对象,
datetime.datetime.now()
不是

请尝试以下方法:

timediff = datetime.datetime.utcnow() - self.last_used.replace(tzinfo=None)
另一个选项是使用
make_aware()
使您的
now()
时区感知:

另见:


您是否启用了时区支持<代码>使用设置中的\u TZ
真的吗
?我想有人会在解决你的问题时击败我,但我不得不问。。。你不是在玩火吗?你的URL在前4个字母中会是唯一的吗?
@alecxe
它在我的设置中。py…
@Foon
谢谢你的提示,我会修复它的…@user2217267实际上,我可能有点插错了。。。我运行了一个快速测试,生成了很多UID。。。使用:6,我仍然没有发生碰撞。6字节(由于base64编码,在执行3/4之后)计算为36位,2^36=68719476736;即使考虑到生日悖论,你的几率也相当高(如果你在3小时后删除它们,还需要一段时间才会出现问题)。第二条评论。。。你的意思是.min to be minutes(这就是我打断它的意思)还是你只是想在调试时返回一个大负数我实际上想返回经过的小时数……你启用了时区支持吗<代码>使用设置中的\u TZ
真的吗
?我想有人会在解决你的问题时击败我,但我不得不问。。。你不是在玩火吗?你的URL在前4个字母中会是唯一的吗?
@alecxe
它在我的设置中。py…
@Foon
谢谢你的提示,我会修复它的…@user2217267实际上,我可能有点插错了。。。我运行了一个快速测试,生成了很多UID。。。使用:6,我仍然没有发生碰撞。6字节(由于base64编码,在执行3/4之后)计算为36位,2^36=68719476736;即使考虑到生日悖论,你的几率也相当高(如果你在3小时后删除它们,还需要一段时间才会出现问题)。第二条评论。。。你的意思是。min to be minutes(这是我打断它的意思)还是你只是想在调试时返回一个大的负片我实际上想返回经过的小时数。。。。。。