首页 > 解决方案 > 当我尝试在烧瓶中使用 Jinja 模板和 request.url 返回数据时,为什么会出现错误?

问题描述

尝试上述操作时出现以下错误:

错误:/cv/action_prediction/TSN_PIC [POST] Traceback 上的异常(最近一次调用最后一次):文件“D:\Anaconda\envs\DEMO\lib\site-packages\flask\app.py”,第 2070 行,在 wsgi_app response = self.full_dispatch_request() 文件“D:\Anaconda\envs\DEMO\lib\site-packages\flask\app.py”,第 1515 行,full_dispatch_request rv = self.handle_user_exception(e) 文件“D:\Anaconda \envs\DEMO\lib\site-packages\flask\app.py”,第 1513 行,在 full_dispatch_request rv = self.dispatch_request() 文件“D:\Anaconda\envs\DEMO\lib\site-packages\flask\app .py”,第 1499 行,在 dispatch_request 中返回 self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args) 文件“D:/Anaconda/envs/DEMO/Visionet_ML_Project/main.py”,第 267 行,在 cv_acp_TSN_PIC_upload_image 返回重定向(request.url,结果)文件“D:\Anaconda\envs\DEMO\lib\site-packages\werkzeug\utils.py",第 569 行,重定向 mimetype="text/html",文件 "D:\Anaconda\envs\DEMO\lib\site-packages\ werkzeug\wrappers\response.py",第 185 行,在init content_type=content_type,文件“D:\Anaconda\envs\DEMO\lib\site-packages\werkzeug\sansio\response.py”,第 140 行,在init self.status = status # 类型:忽略文件“D:\ Anaconda\envs\DEMO\lib\site-packages\werkzeug\sansio\response.py",第 162 行,在状态中引发 TypeError("Invalid status argument") TypeError: Invalid status argument 127.0.0.1 - - [07/Sep/ 2021 10:53:01]“POST /cv/action_prediction/TSN_PIC HTTP/1.1”500 -

我的代码如下:upload.html

<!-- Page Content  -->
      <div id="content" class="p-4 p-md-5 pt-5">

        <h2 class="mb-4">TSN PIC</h2>
        <!Doctype html>
<title>Python Flask File Upload Example</title>
<h2>Select a file to upload</h2>
<p>
    {% with messages = get_flashed_messages() %}
      {% if messages %}
        <ul>
        {% for message in messages %}
          <li>{{ message }}</li>
        {% endfor %}
        </ul>
      {% endif %}
    {% endwith %}
</p>
{% if filename %}
    <div>
    <table border=1>
{% for result in results%}
    <tr>
      <td>
        {{result.data}}
      </td> 
    </tr>
{% endfor %}

    </table>
        <img src="{{ url_for('cv_acp_TSN_PIC_display_image', filename=filename) }}">
        
    </div>
    

    
{% endif %}
<form method="post" action="/cv/action_prediction/TSN_PIC" enctype="multipart/form-data">
    <dl>
        <p>
            <input type="file" name="file" autocomplete="off" required>
        </p>
    </dl>
    <p>
        <input type="submit" value="Submit">
    </p>
</form>
      </div>
        </div>

cv_acp.py

def TSN_PIC(img):
    img = image.imread(img)
 
    fig, ax = plt.subplots(figsize=(18, 18))
    ax.imshow(img.asnumpy())

    transform_fn = transforms.Compose([
    video.VideoCenterCrop(size=224),
    video.VideoToTensor(),
    video.VideoNormalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
    img_list = transform_fn([img.asnumpy()])
    net = get_model('vgg16_ucf101', nclass=101, pretrained=True)
    pred = net(nd.array(img_list[0]).expand_dims(axis=0))
    classes = net.classes
    topK = 5
    ind = nd.topk(pred, k=topK)[0].astype('int')
  #  print('The input video frame is classified to be')
    results = []
    for i in range(topK):
        result = ('\t%s - %.2f'%(classes[ind[i].asscalar()], nd.softmax(pred)[0][ind[i]].asscalar()*100))
    #    print((result)) 
        datadict = {
          #   'header': 
             'data': result
        }  
        results.append(datadict)
    #print (results)
    return results
   # return plt.show()
    

上传.py

@app.route("/cv/action_prediction/TSN_PIC")
def cv_action_prediction_TSN_PIC():
  return render_template("cv_acp_TSN_PIC.html")

@app.route("/cv/action_prediction/TSN_PIC", methods=['POST'])
def cv_acp_TSN_PIC_upload_image():
    if 'file' not in request.files:
        flash('No file part')
        return redirect(request.url)
    file = request.files['file']
    if file.filename == '':
        flash('No image selected for uploading')
        return redirect(request.url)
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        print(app.config)
        path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        print(path)
        file.save(path)
        #print(file.config)
        result = cv_acp.TSN_PIC(path)
        #print (result.data)
        #print('upload_image filename: ' + filename)
        flash('Image successfully uploaded and displayed below')
        return redirect(request.url, result)
    else:
        flash('Allowed image types are -> png, jpg, jpeg, gif')
        return redirect(request.url)

@app.route('/cv/action_prediction/TSN_PIC/result/<filename>')
def cv_acp_TSN_PIC_result(filename):
    #print('display_image filename: ' + filename)
    #return MASK_RCNN('static', filename='uploads/' + filename)
    return redirect(url_for('static', filename='uploads/' + filename), code=301)

标签: flaskposthttpsjinja2

解决方案


推荐阅读