代码之家  ›  专栏  ›  技术社区  ›  moltarze

文件关闭后不更新

  •  1
  • moltarze  · 技术社区  · 7 年前

    我在这里问了一些与我正在处理的Django项目相关的问题,该项目以表单的形式显示文件的内容,您可以使用表单编辑文件,当您提交时,项目将写入文件并自动反映更改。

    我怀疑这与文件“关闭”后由于某种原因仍保持打开状态有关。我试图通过为所有读写操作(也关闭文件)创建函数来解决这个问题,这样每次需要读写时都可以调用它们。这个问题仍然存在。有什么我做得不对吗?文件还在我找不到的地方吗?下面的资源。

    链接到项目: https://repl.it/@xMikee/Calendar ( )

    视图.py

    from django.shortcuts import render
    from django.contrib import messages
    from .forms import FileForm
    import sys
    
    f = open('calendar.txt', "r")
    file_content = f.read()
    f.close()
    if f.closed:
      print("CLOSED FILE from read views")
    
    def writeFile(content, file):
      f = open(file, "w")
      f.write(content)
      f.close()
      if f.closed:
        print("CLOSED FILE from write views")
    
    def home(request):
      return render(request, 'main/index.html',{'file_content':file_content})
    
    def form_get(request):
      print('got form')
      if request.method == 'POST':
        print("OK")
        # create a form instance and populate it with data from the request:
        form = FileForm(request.POST)
        # check whether it's valid:
        if form.is_valid():
          print("OK")
          cd = form.cleaned_data['form']
          writeFile(cd, 'calendar.txt')
      else:
        print('NOT OK')
        form = FileForm()
      return render(request, 'main/index.html', {'form': form})
    
    def thanks(request):
      # if this is a POST request we need to process the form data
      if request.method == 'POST':
        print("OK")
        # create a form instance and populate it with data from the request:
        form = FileForm(request.POST)
        # check whether it's valid:
        if form.is_valid():
          print("OK")
          cd = form.cleaned_data['form']
          print(cd)
          f = open('calendar.txt', 'r+')
          f.write(cd)
          f.close()
      else:
        print('NO POST')
        form = FileForm()
      return render(request, 'main/index.html', {'form': form})
    

    from django import forms
    global cd
    
    f = open('calendar.txt', "r")
    file_content = f.read()
    f.close()
    if f.closed:
      print("CLOSED FILE from read views")
    
    class FileForm(forms.Form):
      form = forms.CharField(label='',initial=file_content,widget=forms.Textarea(attrs={'width':"100%", 'cols' : "102", 'rows': "40", }))
    

    索引.html

    {% extends "base.html" %}
    
    {% block content %}
      <h1 style='text-align:center'>Welcome to the calendar!</h1>
      <div style='text-align:center'>
      <form action="#" method="post">
        {% csrf_token %}
        {{ form }}
        <div style='margin: 0 auto'>
        <input type="submit" value="Submit">
        </div>
      </form>
      <p>{{cd}}</p>
      </div>
    {% endblock content %}
    
    0 回复  |  直到 7 年前