Django останавливается с "генератором StopIteration поднятым генератором", когда HTML-форма позволяет для загрузки файла - PullRequest
0 голосов
/ 18 мая 2019

Моя установка - Windows 10, Python 3.7, Apache 2.4 / mod_wsgi.Когда я добавляю это enctype="multipart/form-data" в мою форму (только путем добавления этого атрибута - файлы не прикреплены к форме), я получаю эту ошибку при отправке:

Django Version: 1.8.5
Exception Type: RuntimeError
Exception Value: generator raised StopIteration
Exception Location: c:\users\holistic\envs\vitadmin\lib\site-packages\django\http\multipartparser.py in read, line 337
Python Executable: C:\Apache24\bin\httpd.exe
Python Version: 3.7.3

Мой код Django такой:

elif request.method == "POST":
    rid = request.POST.get("recipe", "")
    title = request.POST.get("title")
    content = request.POST.get("content")
    tag_names = request.POST.getlist("tags")
    image = request.FILES.get("image")
    if rid:
        recipe = get_object_or_404(FoodRecipe, pk=rid)
    else:
        recipe = FoodRecipe.objects.create(title=title)
    recipe.content = content
    recipe.title = title
    if image:
        recipe.featured = image
    for tn in tag_names:
        tag, cr = Tag.objects.get_or_create(
            name=tn
        )
        recipe.tags.add(tag)
    recipe.save()

И это полный возврат:

Environment:
Request Method: POST
Request URL: http://192.168.1.250/recipes/add/
Django Version: 1.8.5
Python Version: 3.7.3
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'tinymce',
 'sekizai',
 'sorl.thumbnail',
 'recipes',
 'guides',
 'inbox',
 'appdata',
 'account',
 'customer',
 'core')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'account.middleware.PasswordChangeMiddleware.PasswordChangeMiddleware')


Traceback:
File "c:\users\holistic\envs\vitadmin\lib\site-packages\django\core\handlers\base.py" in get_response
  125.                     response = middleware_method(request, callback, callback_args, callback_kwargs)
File "c:\users\holistic\envs\vitadmin\lib\site-packages\django\middleware\csrf.py" in process_view
  174.                     request_csrf_token = request.POST.get('csrfmiddlewaretoken', '')
File "c:\users\holistic\envs\vitadmin\lib\site-packages\django\core\handlers\wsgi.py" in _get_post
  137.             self._load_post_and_files()
File "c:\users\holistic\envs\vitadmin\lib\site-packages\django\http\request.py" in _load_post_and_files
  260.                 self._post, self._files = self.parse_file_upload(self.META, data)
File "c:\users\holistic\envs\vitadmin\lib\site-packages\django\http\request.py" in parse_file_upload
  225.         return parser.parse()
File "c:\users\holistic\envs\vitadmin\lib\site-packages\django\http\multipartparser.py" in parse
  149.             for item_type, meta_data, field_stream in Parser(stream, self._boundary):
File "c:\users\holistic\envs\vitadmin\lib\site-packages\django\http\multipartparser.py" in __iter__
  628.             yield parse_boundary_stream(sub_stream, 1024)
File "c:\users\holistic\envs\vitadmin\lib\site-packages\django\http\multipartparser.py" in parse_boundary_stream
  567.     chunk = stream.read(max_header_size)
File "c:\users\holistic\envs\vitadmin\lib\site-packages\django\http\multipartparser.py" in read
  337.         out = b''.join(parts())

Exception Type: RuntimeError at /recipes/add/
Exception Value: generator raised StopIteration

Есть идеи, что происходит не так?

PS: То же приложение django прекрасно работало в настройках Linux / Nginx / Gunicorn / Python2.7.Итак, я полагаю, что между Django / Python / Apache должна быть неправильная конфигурация.

1 Ответ

3 голосов
/ 18 мая 2019

Ваш Django очень старый, и вам нужно обновить.Это проблема совместимости с Python 3.7, которую разработчики Django уже исправили исправил четыре года назад, когда это было просто PendingDeprecationWarning на Python 3.5.

На самом деле, вы находитесь на самом последнем Djangoверсия, которая не имеет исправления.Даже 1.8.6 имеет исправление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...