analyze() отсутствует один позиционный аргумент: ‘запрос’

#javascript #python #flask #fast-ai

#javascript #python #flask #быстрый ИИ

Вопрос:

Я пытаюсь отправить URL изображения

 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 я фактически следую этому коду.

Но по какой-то причине это всегда выдает мне эту ошибку analyze() missing 1 required positional argument: 'request' .

Почему это произошло и что я сделал не так? Я почти уверен, что правильно отправил аргумент запроса, используя JS Ajax.

 Traceback (most recent call last):
  File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 2464, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:UsersapanjAnaconda3libsite-packagesflask_socketio__init__.py", line 46, in __call__
    start_response)
  File "C:UsersapanjAnaconda3libsite-packagesengineiomiddleware.py", line 74, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 2450, in wsgi_app
    response = self.handle_exception(e)
  File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 1867, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:UsersapanjAnaconda3libsite-packagesflask_compat.py", line 39, in reraise
    raise value
  File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:UsersapanjAnaconda3libsite-packagesflask_compat.py", line 39, in reraise
    raise value
  File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:UsersapanjAnaconda3libsite-packagesflaskapp.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
TypeError: analyze() missing 1 required positional argument: 'request'
  

Комментарии:

1. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Traceback») в вопрос (не комментарий) в виде текста (не скриншота). Есть и другая полезная информация.

2. @furas Я только что отредактировал свой вопрос с помощью обратной трассировки.

Ответ №1:

Вы не передаете request URL-адрес. Он поступает в запрос автоматически. Попробуйте:

 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
  

Комментарии:

1. Я полагаю, это работает? На выходном терминале больше нет ошибки трассировки, но в консоли браузера я получаю POST http://url/analyze 500 (INTERNAL SERVER ERROR) ошибку.