Python Django+;uWSGI&x2B;nginx=奇怪的缓存?
我在web应用程序上同时使用Django、uWSGI和nginx。我遇到了一个奇怪的问题,即预填充了今天日期的日期字段被卡在了今天之前的日期上。我已经把它缩小到上次重新启动uWSGI守护进程的日期。如果我重新启动守护进程并刷新页面,它会立即被修复,但是如果我明天重新访问页面,它将有今天的日期 我认为uWSGI和nginx在默认情况下都没有启用任何缓存 我不想费心包括nginx配置,因为我不相信这是相关的,但这里是我的uwsgi配置:Python Django+;uWSGI&x2B;nginx=奇怪的缓存?,python,django,nginx,uwsgi,Python,Django,Nginx,Uwsgi,我在web应用程序上同时使用Django、uWSGI和nginx。我遇到了一个奇怪的问题,即预填充了今天日期的日期字段被卡在了今天之前的日期上。我已经把它缩小到上次重新启动uWSGI守护进程的日期。如果我重新启动守护进程并刷新页面,它会立即被修复,但是如果我明天重新访问页面,它将有今天的日期 我认为uWSGI和nginx在默认情况下都没有启用任何缓存 我不想费心包括nginx配置,因为我不相信这是相关的,但这里是我的uwsgi配置: [uwsgi] chdir=/home/nick/django
[uwsgi]
chdir=/home/nick/django-prod/budget
pythonpath=..
socket=/home/nick/django-prod/uwsgi/uwsgi.sock
module=budget.wsgi
wsgi-file=/home/nick/django-prod/budget/wsgi.py
master=True
pidfile=/tmp/project-master.pid
vacuum=True
uid=www-data
gid=www-data
max-requests=5000
daemonize=/var/log/uwsgi/budget.log
我相信这可能不太相关,但无论如何,我将在这里包括它,这是我用作日期选择器字段的自定义小部件,它覆盖内置日期字段:
class JDatePickerWidget(forms.DateInput):
def __init__(self, attrs=None, format='%m/%d/%Y'):
super(JDatePickerWidget, self).__init__(attrs)
self.format = format
def render(self, name, value, attrs=None):
if value is None:
value = ''
final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
if value != '':
# Only add the 'value' attribute if a value is non-empty.
final_attrs['value'] = force_text(self._format_value(value))
return_string = mark_safe(u'''<script type="text/javascript">
$(function() { $( '#%s' ).datepicker({ dateFormat: 'mm/dd/yy'}); });
</script>''' % final_attrs['id'])
return_string = return_string + format_html('<input{0} />', flatatt(fin$
return return_string
class JDatePicker(forms.DateField):
widget = JDatePickerWidget
class JDatePickerField(models.DateField):
def formfield(self, **kwargs):
defaults = {'form_class': JDatePicker}
defaults.update(kwargs)
return super(JDatePickerField, self).formfield(**defaults)
类JDatePickerWidget(forms.DateInput):
定义初始化(self,attrs=None,格式=“%m/%d/%Y”):
超级(JDatePickerWidget,self)。\uuuu初始化(attrs)
self.format=格式
def render(自身、名称、值、属性=无):
如果值为“无”:
值=“”
final\u attrs=self.build\u attrs(attrs,type=self.input\u type,name=name)
如果值!='':
#仅当值为非空时才添加“value”属性。
最终属性['value']=强制文本(自身格式\u值(值))
return\u string=mark\u safe(u“”)
$(function(){$('#%s')。日期选择器({dateFormat:'mm/dd/yy'});});
'''%final_attrs['id'])
return\u string=return\u string+格式\u html(“”,flatatt(fin$
返回字符串
类JDatePicker(forms.DateField):
widget=JDatePickerWidget
类JDatePickerField(models.DateField):
def表单字段(自身,**kwargs):
默认值={'form_class':JDatePicker}
默认值。更新(kwargs)
返回super(JDatePickerField,self).formfield(**默认值)
如何停止缓存,以便在我重新访问页面时刷新默认字段值?您没有发布表单的代码,因此这主要是一个猜测,但这种问题通常来自于通过调用
datetime.datetime.now()
由于顶级代码(类主体级语句是其中的一部分)在导入时只执行一次,所以您有过时的值
(编辑)根据下面的评论,您的问题来自于在您的模型的一个字段中使用
default=datetime.datetime.now()
。您希望传递可调用项,即default=datetime.datetime.now
(无参数),如下所述:我使用的是datetime.datetime.now()实际上,在我的模型定义中。
我想解决办法是更改它,使其没有默认值=
值,而是在模板本身中呈现日期?是的,将其作为模型的默认值。字段
会产生同样的问题。在这种情况下,解决方案(这里的文档)是传递一个可调用的instea调用callable.IOW的结果的d:replacedefault=datetime.datetime.now()
为default=datetime.datetime.now
(不带参数)。啊,这是重要的一部分:“如果可调用,则每次创建新对象时都会调用它。”现在可以工作了,谢谢!我有完全相同的问题。用chrome打开网站显示旧日期,但使用duckduckgo有正确的日期。。。