在上传前在本地进行一些处理

时间:2017-02-14 12:42:00

标签: python django permissions django-views

我是Django的新手并做了一个小项目,用户登录Django网站,然后上传一些图像。在远程服务可以使用之前,这些映像需要对它们进行一些预处理。我想要做的是在客户端执行预处理,我有一些python代码。但是,我不确定如何设置Django以便用户可以授予它在本地运行某些代码的权限(并在临时目录中生成一些文件)。

因此,例如,我的一个观点如下:

class UploadImageView(APIView):
    permission_classes = (IsAuthenticated, )
    authentication_classes = (JSONWebTokenAuthentication, )

    # Create your views here.
    def post(self, request):
        image = request.FILES['image']
        study = int(request.data.get('study').strip())            

        if image is None:
            return Response(status=status.HTTP_400_BAD_REQUEST)

        # Check study ID and Image type exists
        s = StudyModel.objects.filter(pk=study).first()            
        if s is None:
            return Response(status=status.HTTP_412_PRECONDITION_FAILED)
        try:
            _ = ImageModel.objects.create(path=image, study=s)
        except:
            return Response(status=status.HTTP_417_EXPECTATION_FAILED)

        return Response(status=status.HTTP_200_OK)

目前,用户需要手动本地运行一些代码来生成此转换后的图像,然后调用ReST API上传它。更好的是用户选择原始图像,一些代码在本地转换它,然后上传转换后的图像。

2 个答案:

答案 0 :(得分:1)

这不是你能做的事情。 Django代码在服务器上运行。您可以在本地运行的唯一代码是浏览器中的Javascript。

答案 1 :(得分:1)

过去在Java applet的帮助下,这种事情很有可能。事实上,我构建了第一个小程序之一。它可以动态调整图像大小或压缩任何文件,但我离题了。现在,applets在浏览器中得不到广泛支持。

您可以选择使用多个javascript文件上传器之一,允许将图像加载到画布中。有关如何使用画布的信息,请参阅此excellent tutorial on MDN。这个QA解释了如何将图像加载到画布中。