Python.Джанго.Как избежать регистрации тела файла при регистрации входящей полезной нагрузки.многочастному / форм-данных, - PullRequest
0 голосов
/ 27 февраля 2019

Конверт:
Python == 2,7
Django == 1,8,4

Требуется:
Когда приходит запросс multipart/form-data требуется заменить данные файла, но сохранить всю другую информацию.

Пример:
print request.data содержит следующее:

--------------------------0a79b890de6a2e8f
 Content-Disposition: form-data; name="image"; filename="example.jpeg"
 Content-Type: image/jpeg

 ����JFIFHH��C
 and here is 2MB of bytes
����J��(!1AQqa ���@���P���?�z▒��h�x*iٍ8�
 --------------------------0a79b890de6a2e8f
 Content-Disposition: form-data; name="field_1"

 example_1
 --------------------------0a79b890de6a2e8f
 Content-Disposition: form-data; name="field_2"

 example_2

Ожидаемое:

--------------------------0a79b890de6a2e8f
 Content-Disposition: form-data; name="image"; filename="example.jpeg"
 Content-Type: image/jpeg

 <file-data>
 --------------------------0a79b890de6a2e8f
 Content-Disposition: form-data; name="field_1"

 example_1
 --------------------------0a79b890de6a2e8f
 Content-Disposition: form-data; name="field_2"

 example_2

1 Ответ

0 голосов
/ 27 февраля 2019

Решение:
Это определенно не лучшее решение.Я предполагаю, что в ответах может быть предложено больше решений.
Но я надеюсь, что это может кому-то помочь.

Поместите этот класс в промежуточное ПО (решение упрощено):

import logging
import re

RE_PATTERN = r'(?<=; filename=")(.*?)"\\r\\nContent-Type: (.*?)\\r\\n(.*?)((-+)([a-zA-Z0-9_.-]+)\\r\\nContent-Disposition:)'  # noqa
RE_REPLACE_TO = r'\1"\\r\\nContent-Type: \2\\r\\n\\r\\n<file-data>\\r\\n\4'


class RequestLogger(object):

    def __init__(self):
        self._logger = logging.getLogger(__name__)

    def process_request(self, request):
        formatted_body = re.sub(
            pattern=RE_PATTERN,
            repl=RE_REPLACE_TO,
            string="%r" % request.body).decode('string_escape')
        # or "{!r}".format(request.body)

        self._logger.info('Body: {}'.format(formatted_body))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...