Django + uWSGI + nginx =奇怪的缓存?

时间:2014-01-07 14:08:02

标签: python django nginx uwsgi

我在我的网络应用程序中一起使用Django,uWSGI和nginx。我有一个奇怪的问题,其中预先填充今天日期的DateField在今天之前的某个日期被卡住了。我把它缩小到我上次重新启动uWSGI守护程序的日期。如果我重新启动守护进程并刷新页面,它会立即修复,但如果我明天重新访问该页面,它将具有今天的日期。

我认为默认情况下uWSGI和nginx都没有启用任何缓存。

我不会打扰包括nginx配置,因为我不相信这是相关的,但这是我的uwsgi配置:

[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

我相信这可能 less 相关,但无论如何我都会在这里包含它,这是我用作日期选择器字段的自定义窗口小部件,它覆盖了内置的DateField:

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)

如何停止此缓存,以便在重新访问页面时刷新默认字段值?

1 个答案:

答案 0 :(得分:3)

你没有发布你的表单代码所以这通常是一个疯狂的猜测,但这种问题通常来自于通过调用{{1}来初始化你的表单的一个字段(或者Queryset或其他)。由于顶级代码(类 - 主体级语句是其中的一部分)仅在导入时执行一次,因此您具有过时值。

(编辑)从下面的评论中,您的问题来自在您的某个模型字段中使用datetime.datetime.now()。你想传递callable,即default=datetime.datetime.now()(没有parens),如下所示:https://docs.djangoproject.com/en/1.6/ref/models/fields/#default