我在我的web應用程序上一起使用Django,uWSGI和nginx。我有一個奇怪的問題,即預填有今天日期的DateField在今天之前的某個日期卡住了。我已縮小到我上次重新啓動uWSGI守護程序的日期。如果我重新啓動守護程序並刷新頁面,它會立即修復,但如果我明天再次訪問該頁面,它將具有今天的日期。Django + uWSGI + nginx =奇怪的緩存?
我認爲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
我認爲這可能是少相關,但我會包括它反正在這裏,這是我使用的是作爲覆蓋內置的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)
如何從發生停止此緩存,以便默認字段值會被刷新當我重新審視頁面?
我在我的模型定義中實際使用了'datetime.datetime.now()'。我想修復會改變它,所以沒有'default ='值,而是在模板本身中呈現日期? – trpt4him
好的,將它作爲'models.Field'的默認值會產生同樣的問題。在這種情況下,解決方案 - 作爲文檔https://docs.djangoproject.com/en/1.6/ref/models/fields/#default - 將傳遞一個可調用對象,而不是調用可調用對象的結果。 IOW:用'default = datetime.datetime.now'替換'default = datetime.datetime.now()'(沒有parens)。 –
啊,這是重要的部分:「如果可調用,每次創建新對象時都會調用它。」現在就工作,謝謝! – trpt4him