使用标准python文件操作(Django)时被web服务器错误缓存的文件

2024-09-30 19:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django应用程序,它从一个文本文件中填充内容,并以标准形式使用initial选项填充内容。该文件在服务器上得到更新,但当表单刷新时,它会从先前保存的版本或重新加载apachewebserver之前的版本中获取内容。你知道吗

这意味着文件正在被缓存,内容是从错误的缓存中提取的,而不是新文件。你知道吗

这是我的密码。如何确保每次spamsource函数都从最近保存的文件而不是缓存中获取内容。你知道吗

def spamsource():
   try:
    f= open('center_access', 'r')
    read=f.read()
    # some manipulation on read 
    f.close()
    return read
   except IOError:
    return "prono.nr"

class SpamForm(forms.Form):

    domains =forms.CharField(widget=forms.Textarea(attrs=attrs_dict),
                                label=_(u'Domains to be Banned'), initial= spamsource())
def function(request):
    # It writes the file center_access based on the changes in the textbox domains

Tags: 文件the版本内容readreturnaccesson
2条回答

我修好了。问题是所有缓存中间件都存在于设置.py,用于加速web应用程序的另一面。你知道吗

问题很简单,字段的所有参数都是在表单定义时计算的。因此,domains的初始值被设置为在定义表单时(通常是在服务器启动时)从spamsource()返回的值。你知道吗

解决这个问题的一种方法是重写表单的__init__方法,并在那里设置域的初始值:

class SpamForm(forms.Form):
    domains = ...

    def __init__(self, *args, **kwargs):
        super(SpamForm, self).__init__(*args, **kwargs)
        self.fields['domains'].initial = spamsource()

或者,可以在视图中实例化窗体时设置初始值:

form = SpamForm(initial={'domains': spamsource()})

相关问题 更多 >