Я хотел бы открыть загруженный файл в валидаторе, чтобы убедиться, что файл в порядке, а затем снова откройте его в функции просмотра для извлечения данных.
Я не уверенесли это должно быть сделано так.Скажите мне, что вы думаете.
Вот мой валидатор в его простом состоянии:
def validate_file(value):
with value.open("r") as sf:
pass # do some checks with the data
# now the file is closed
, и это моя функция просмотра:
def home(request):
if request.method == 'POST':
# create 2 form
form_message = Filtre_message_form(request.POST)
form_spatial = Filtre_spatial_form(request.POST, request.FILES)
if all((form_message.is_valid(), form_spatial.is_valid())):
# if the file is good open it
f = request.FILES['file'].open(mode='r')
# do some stuf with it
else:
# create 2 empty form
form_message = Filtre_message_form()
form_spatial = Filtre_spatial_form()
return render(request, 'home.html', locals())
И я получаю этоошибка ValueError: I/O operation on closed file.
Вот стек ошибок:
Traceback (most recent call last):
File "H:\workspace\test_Django\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "H:\workspace\test_Django\venv\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "H:\workspace\test_Django\venv\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "H:\workspace\test_Django\django_test\app_test\views.py", line 16, in home
f = request.FILES['file'].open(mode='r')
File "H:\workspace\test_Django\venv\lib\site-packages\django\core\files\uploadedfile.py", line 87, in open
self.file.seek(0)
ValueError: I/O operation on closed file.
Я пробовал это:
def validate_file(value):
sf = value.open("r")
# this dosen't close the file
и это работает, но на самом деле я использую это lib для чтения и анализа данных.Таким образом, используя lib, валидатор выглядит следующим образом:
def validate_file(value):
import shapefile
sf = shapefile.Reader(shp=value)
, и это не работает, вот стек ошибок:
Internal Server Error: /accueil/
Traceback (most recent call last):
File "H:\workspace\test_Django\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "H:\workspace\test_Django\venv\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "H:\workspace\test_Django\venv\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "H:\workspace\test_Django\django_test\app_test\views.py", line 16, in home
f = request.FILES['file'].open(mode='r')
File "H:\workspace\test_Django\venv\lib\site-packages\django\core\files\uploadedfile.py", line 87, in open
self.file.seek(0)
ValueError: I/O operation on closed file.
Я не понимаю, почему я могу 'открыть файл во второй раз?Библиотека, очевидно, закрывает файл, так почему я не могу открыть его во второй раз?
Можете ли вы помочь мне, пожалуйста?