Я использую 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' (без парнеров). –
Ах, это важная часть: «Если вызываемая она будет вызываться каждый раз, когда создается новый объект». Работает сейчас, спасибо! – trpt4him