尝试在Django模型中设置密钥到期的时间戳并遇到此问题:
我目前的代码:
key_expires = models.DateTimeField(default=timezone.now() + timezone.timedelta(days=1))
Run Code Online (Sandbox Code Playgroud)
上面的代码可行,但是当使用"timezone.now()"时,它会从Apache重新启动时获取时间戳,因此这不起作用.我做了一些研究,找到了问题的那一部分的解决方案,所以通过将"timezone.now()"替换为"timezone.now",每次创建对象时我都会获得当前时间戳,这是完美的,问题部分解决了.
我在使用"timezone.timedelta(days = 1)"更改日期时遇到问题.
key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1))
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1))
Run Code Online (Sandbox Code Playgroud)
TypeError:+:'function'和'datetime.timedelta'不支持的操作数类型
目标是提前24小时设置时间戳.
任何帮助是极大的赞赏.
由于网站性能下降,我开始将Varnish信息作为缓存解决方案,并对Google Analytics有一些疑问.
当网站上有5K活跃用户时(根据GA的实时流量报告),后端服务器上的服务器加载到30-40 +,乘客的队列开始堆叠,站点几乎无法使用.我知道需要获得更好性能的慢查询和数据库工作,但目前我没有资源来优化查询和数据库模式,索引等,所以考虑添加清漆.
我创建了一个图表来更好地显示堆栈,这是当前堆栈的样子:(该站点当前在CDN中缓存images/css/js - Akamai)

我想在后端服务器前面添加两个varnish实例来缓存文章,堆栈将如下所示:

该网站是一个新闻网站,我正在寻找建议,如何正确处理cookie和缓存.对于第1阶段,我想简单地完全排除经过身份验证的用户并提供动态内容,因为同时经过身份验证的用户并不多.
混淆是谷歌分析的cookie.我的理解是,Google使用javascript在客户端设置了Cookie,客户端直接与Google通信,因此后端不需要客户端发送的GA Cookie,在vcl_recv子例程中可以安全地取消它们.
sub vcl_recv {
// Remove has_js and Google Analytics __* cookies.
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(_[_a-z]+|has_js)=[^;]*", "");
// Remove a ";" prefix, if present.
set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");
}
Run Code Online (Sandbox Code Playgroud)
问题
由于varnish默认不会缓存任何具有cookie集的内容,因此只需添加一个删除GA cookie的策略就可以安全地实现上述堆栈吗?据我所知,如果没有微调VCL策略,我不会获得高命中率,但是在我的测试中,看来即使在后端服务器前面有默认清漆,命中率为30%,在分析后,我看到了大多数是js/css和图像文件,所以很明显一些静态文件不是由Akamai甚至Apache提供的,而是传递给Passenger/Rails来提供静态文件.这肯定需要纠正.
我是清漆的新手所以非常感谢任何关于清漆或我提出的堆栈的更多细节/建议.
对于阶段2 +
由于内容得到更新,我计划在两个varnish服务器上执行清除,在应用更改时由后端服务器触发,例如用户注释,页面查看等.
有大量存档文章没有更新,永久缓存它们是否安全?
由于我打算使用RAM进行清漆存储,我是否应该使用额外的(第三种)清漆,并使用磁盘进行存储,以明确这些存档的页面.也许在清漆服务器前添加nginx堆栈以将流量定向到存档内容的特定清漆实例?负载均衡器 - >一对Nginx反向代理>一对清漆 - >(清漆LB到8个后端服务器)
我也很欣赏有关架构的任何建议.如果您需要更多详细信息以提供更好的建议,请告诉我们,我们很乐意为您提供更多详细信息.
我在创建"估计"资源时遇到了麻烦.基本上,我想要实现的是创建一个单独的API调用来创建一个"Estimate"实例,它有3个外键,并且更喜欢使用ModelViewSet来利用它所带来的所有方法(POST, GET,PUT,DELETE,PATCH).
例如:
使用以下数据进行单个POST调用:{user:,property:,estimate_type:,message:"test message"}/api/estimate /
我设法配置API以检索我需要的所有细节,除了"用户"对象详细信息,而我只获取URL,但我想这没关系,因为我可以在单独的调用中获取用户详细信息.
我有点困惑,并且想要了解通过一次调用实现创建"Estimate"实例的正确方法.我应该覆盖"估计"类的保存方法吗?
非常感谢所有建议.
Django == 1.7.6 djangorestframework == 3.1.0
这些是我的模特:
class Property(models.Model):
user = models.ForeignKey(User)
address = models.CharField(max_length=100)
def __str__(self):
return self.address
class EstimateType(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Estimate(models.Model):
user = models.ForeignKey(User)
property = models.ForeignKey(Property)
estimate_type = models.ForeignKey(EstimateType)
message = models.TextField(max_length=144)
def __str__(self):
return "{} {}".format(self.user.username, self.property.address1)
Run Code Online (Sandbox Code Playgroud)
这些是序列化器:
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('pk','username', 'email','first_name', 'last_name', 'is_staff')
class PropertySerializer(serializers.ModelSerializer):
user = UserSerializer()
class Meta:
model = …Run Code Online (Sandbox Code Playgroud)