Сжатие и распаковка запросов POST и GET с использованием lz4 + django + rest_framework - PullRequest
0 голосов
/ 04 мая 2018

Я использую django 1.11 + rest_framework, пытаясь реализовать метод сжатия без потерь, используя библиотеку lz4 python. В двух словах, я реализовал метод представления POST на основе классов, в котором определен метод сжатия. Позже я хотел бы реализовать метод распаковки, когда выполняется запрос GET. Когда я пытаюсь сделать запрос POST, я получаю TypeErrorr log:

a bytes-like object is required, not 'InMemoryUploadedFile' Я не очень знаком со сжатием без потерь, было бы неплохо правильно выбрать правильное направление. И наконец, есть ли другой способ, которым я бы реализовал сжатие и распаковку файлов методами POST и GET?

Моя модель выглядит следующим образом:

class EmployeeDocument(models.Model):
    """
    Model, Which holds Employee documents uploaded.

    """
    employee = models.ForeignKey(
        Employee, related_name="employee_docs", null=True, blank=True)
    document = models.FileField(
        upload_to='Images/', default='Images/None/No-img.jpg')
    details = models.TextField()
    # url = models.URLField(null=True)
    # path_to_image = models.CharField(null=True, max_length=100)
    # upload_date = models.DateTimeField(auto_now=True, db_index=True)

    def __str__(self):
        return 'DOC - %s' % (self.employee.user.username)

Тогда Views.py

class EmployeeDocumentPOST(APIView):
    """
      compress Document
    """
    permission_class = [AllowAny]
    serializer_class = EmployeeDocumentSerializer

    def compressed_doc(self,document):
        document = lz4.frame.compress(document)
        return document

    def post(self, request, *args, **kwargs):
        compressd_doc = self.compressed_doc(document)
        employee = Employee.objects.get(id=request.data.pop('employee'))
        detail = request.data.get('detail')
        employee_doc = EmployeeDocument.objects.create(**request.data)

        employee_doc.compressed_doc = compressed_doc
        employee_doc.employee = employee
        employee_doc.detail = detail
        employee_doc.save()

        serializer = EmployeeDocument(employee_doc)
        return Response(serializer.data, status = status, status = status.HTTP_200_OK)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...