Файл не обновляется после закрытия - PullRequest
0 голосов
/ 13 сентября 2018

Я задал здесь несколько вопросов, связанных с проектом Django, над которым я работаю, который отображает содержимое файла в форме, и вы можете редактировать файл с помощью формы, когда вы отправляете его, проект записывает в файл и изменения автоматически отражаются.

Итак, я получил проект для отображения содержимого текстового файла календаря в форме, и я смог получить содержимое формы в своем скрипте Python для манипуляции. У меня проблема с записью этого содержимого в файл, потому что по какой-то причине изменения никогда не вступают в силу до тех пор, пока я не перезапущу сервер (это не идеально, так как он должен работать непрерывно).

Я подозреваю, что это как-то связано с тем, что файл по какой-то причине остается открытым после того, как он "закрыт". Я попытался исправить это, создав функции для всех операций чтения и записи (которые также закрывают файл), чтобы я мог вызывать их каждый раз, когда мне нужно для чтения / записи. Проблема все еще сохраняется. Есть ли что-то, что я делаю здесь неправильно? Файл все еще открыт где-то, что я не могу найти? Ресурсы ниже.

Ссылка на проект: https://repl.it/@xMikee/Calendar ( календарь на данный момент является просто шаблоном )

views.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})

forms.py

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", }))

index.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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...