analytics缺少一个位置参数:“ request”

问题描述

我正在尝试发送图片网址

var photoData = $("#photo").attr("src");

// console.log(photoURL);
console.log(photoData);

var data = photoData;
$.post("/analyze",data)
      .done((prediction) => {
           console.log('success')
      })

使用Flask Python转到此路线

@app.route('/analyze',methods=['POST'])
async def analyze(request):
    predictionRaw = learn.predict(open_image(get_image_files(request)[0]))
    prediction = str(predictionRaw)
    return prediction

learn.predict()使用Fast Ai库。对于Python代码,我实际上遵循this code

但是由于某种原因,它总是给我这个错误analyze() missing 1 required positional argument: 'request'

为什么会发生这种情况,我做错了什么?我很确定我已经正确使用JS Ajax发送了请求参数。

Traceback (most recent call last):
  File "C:\Users\apanj\Anaconda3\lib\site-packages\flask\app.py",line 2464,in __call__
    return self.wsgi_app(environ,start_response)
  File "C:\Users\apanj\Anaconda3\lib\site-packages\flask_socketio\__init__.py",line 46,in __call__
    start_response)
  File "C:\Users\apanj\Anaconda3\lib\site-packages\engineio\middleware.py",line 74,start_response)
  File "C:\Users\apanj\Anaconda3\lib\site-packages\flask\app.py",line 2450,in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\apanj\Anaconda3\lib\site-packages\flask\app.py",line 1867,in handle_exception
    reraise(exc_type,exc_value,tb)
  File "C:\Users\apanj\Anaconda3\lib\site-packages\flask\_compat.py",line 39,in reraise
    raise value
  File "C:\Users\apanj\Anaconda3\lib\site-packages\flask\app.py",line 2447,in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\apanj\Anaconda3\lib\site-packages\flask\app.py",line 1952,in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\apanj\Anaconda3\lib\site-packages\flask\app.py",line 1821,in handle_user_exception
    reraise(exc_type,line 1950,in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\apanj\Anaconda3\lib\site-packages\flask\app.py",line 1936,in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
TypeError: analyze() missing 1 required positional argument: 'request'

解决方法

您没有在URL中传递request。它自动包含在请求中。试试:

from flask import request

@app.route('/analyze',methods=['POST'])
def analyze():

    print(request.get_data()) # to see what you're sending

    predictionRaw = learn.predict(open_image(get_image_files(request.data)))
    prediction = str(predictionRaw)
    return prediction