【问题标题】:how to assign a javascript function return value to the variable in python?如何将javascript函数返回值分配给python中的变量?
【发布时间】:2023-03-06 11:44:01
【问题描述】:

html代码:

<h1>Uploading a photo.</h1>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js"></script>
    <script type="text/javascript">
        var p;
        var canvas = document.createElement("canvas");
        var img1=document.createElement("img");

        function converttobyte()
        {
            p=document.getElementById("file").value;
            img1.setAttribute('src', p);
            canvas.width = img1.width;
            canvas.height = img1.height;
            var ctx = canvas.getContext("2d");
            ctx.drawImage(img1, 0, 0);
            var dataURL = canvas.toDataURL("image/png");
            alert("from getbase64 function"+dataURL );
            return dataURL;
        }
    </script>

    <form action="UploadFile" method="post" accept-charset="utf-8" name="UploadFileForm"
                                                   enctype="multipart/form-data">
        <input type="file" id="file" name=""><br>
        <input type="submit" value="Upload" onclick="converttobyte">
    </form>

Python 代码:

def UploadFile(request):
  if request.method == 'POST':
      converttobyte = request.GET['converttobyte'].decode("base64")
      #file = request.FILES['avatar']
      default_storage.save("%s"%(converttobyte), ContentFile(converttobyte.read()))
      return HttpResponse("File uploaded successfully")
  else:
      return HttpResponse("please upload a file")

应该在 if request.method== 'post' 之后添加什么语句,以便接受 python 脚本中的函数返回值。

请帮助我。提前致谢

【问题讨论】:

    标签: javascript jquery python html django


    【解决方案1】:

    解决问题的一种方法是:

    1. 如下创建一个隐藏字段

      <input type="hidden" id="hide" name="URL" value="">
      
    2. 在javascript函数中,不是返回值,而是为隐藏字段设置它

      document.getElementById("hide").value = dataURL;
      
    3. 提交表单后,隐藏值随之而来。在 python 代码中使用 request.GET['URL'] 访问字段

    希望这能解决问题。

    【讨论】:

    • 感谢您的回复,我已经尝试过了,但是一旦我提交表单,我就会收到异常类型:MultiValueDictKeyError 异常值:“'URL'”
    • 尝试在python代码中使用request.POST.get('URL', False)。这是一种绕过默认值的方法,以防未提供它们
    • 嗨 mayankTUM 我也尝试过这种方式,但首先图像文件没有在默认存储中转换为 dataurl 它显示的是一个空的文本文件......请帮助我。
    【解决方案2】:

    您的代码存在一些问题。

    您不应该调用onclick="converttobyte()" 之类的方法吗?

    converttobyte() 方法中,您只是在提交表单时返回dataURL,但该值如何传递给 POST 请求?

    您需要通过 POST 请求传递值。您可以使用隐藏字段来实现此目的。试试这样的:

    Javascript:

    <h1>Uploading a photo.</h1>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js"></script>
    <script type="text/javascript">
        var p;
        var canvas = document.createElement("canvas");
        var img1=document.createElement("img");
    
        function converttobyte()
        {
            p=document.getElementById("file").value;
            img1.setAttribute('src', p);
            canvas.width = img1.width;
            canvas.height = img1.height;
            var ctx = canvas.getContext("2d");
            ctx.drawImage(img1, 0, 0);
            var dataURL = canvas.toDataURL("image/png");
            alert("from getbase64 function"+dataURL );
    
            /**Set the value of the raw_bytes input field*/
            var form = document.getElementById('uploadForm');
            form.raw_bytes.value = dataURL;
        }
    </script>
    
    <form id="uploadForm" action="UploadFile" method="post" accept-charset="utf-8" name="UploadFileForm"
                                                   enctype="multipart/form-data">
        <input type="file" id="file" name=""><br>
        <input type="hidden" name="raw_bytes" id="raw_bytes" />
        <input type="submit" value="Upload" onclick="converttobyte()">
    </form>
    

    Django 视图:

    def UploadFile(request):
      if request.method == 'POST':
          raw_bytes = request.POST['raw_bytes'].decode("base64")
    

    【讨论】:

    • 非常感谢兄弟的回复,但我得到了 Exception Type: MultiValueDictKeyError Exception Value: "'raw_bytes'"
    • request.POST 的输出是什么?
    • 图像未转换为警告框中的 dataurl 空字符串被附加到“来自 getbase64 函数”..
    【解决方案3】:

    在您的表单内部创建一个隐藏变量,

    <form action="UploadFile" method="post" accept-charset="utf-8" name="UploadFileForm"
                                                       enctype="multipart/form-data">
    
            <input type="hidden" id="url" name="url" value="">  
            <input type="file" id="file" name=""><br>
            <input type="submit" value="Upload" onclick="converttobyte">
    </form>
    

    不是从 java 脚本返回值,而是将该值分配给隐藏变量,

    function convert_to_byte()
            {
                p=document.getElementById("file").value;
                img1.setAttribute('src', p);
                canvas.width = img1.width;
                canvas.height = img1.height;
                var ctx = canvas.getContext("2d");
                ctx.drawImage(img1, 0, 0);
                var dataURL = canvas.toDataURL("image/png");
                alert("from getbase64 function"+dataURL );
                document.getElementById("url").value = dataURL;
            }
    

    然后提交后就可以使用下面的代码来获取python中的值了,

    if request.method == 'POST':
        url_value = request.POST['url']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2014-02-24
      • 1970-01-01
      • 2020-12-09
      • 1970-01-01
      相关资源
      最近更新 更多