Python Flask: вызов API не происходит, что приводит к внутренней ошибке 500 сервера - PullRequest
0 голосов
/ 25 июня 2019

Я довольно новичок в Python Flask, настрою простой проект, используя flask_restplus для выполнения базового вызова API. Я могу видеть мой API на странице сваггера, но это приводит к внутренней ошибке 500 сервера

run.py:

import os

from flask_script import Manager
from app.main import create_app

from app.app import blueprint

app = create_app(os.getenv('BOILERPLATE_ENV') or 'dev')
app.register_blueprint(blueprint)

app.app_context().push()

manager = Manager(app)


@manager.command
def run():
    app.run(threaded=True)


if __name__ == '__main__':
    manager.run()

app.py:

from flask_restplus import Api
from flask import Blueprint
from .main.controller.hello_controller import api as hello

blueprint = Blueprint('api', __name__)

api = Api(blueprint,
          title='My RESTful API',
          version='1.0',
          description='My flask restplus web service'
          )

api.add_namespace(hello, path='/hello')

hello_controller.py:

import json
from flask import request
from flask_restful import Resource

api = Namespace('hello', description='hello world')

@api.route('/', methods=['GET'])
class Hello(Resource):
    @api.param('name1', 'Name1')
    @api.param('name2', 'Name2')
    @api.response(200, 'hello said successfully')
    @api.doc('Hello Names')
    def get(self, name1, name2):
        """ Get Hello names """
        return json.dump("Hello" + name1 + "and Hello" + name2), 200

Пробовал эти два типа возврата тоже, но не повезло.

return json.dumps({'data': "Hello" + name1 + "and Hello" + name2, 'success': 200})

return Response(json.dumps("Hello" + name1 + "and Hello" + name2), mimetype='application/json')

Когда я пытаюсь выполнить вышеуказанный вызов API из пользовательского интерфейса Swagger, это приводит к 500 Internal server error. Во-первых, это даже не соответствует моему маршруту / методу API. Это ошибка с консоли:

    ERROR:flask.app:Exception on /hello/ [GET]
Traceback (most recent call last):
  File "/Users/myuser/PycharmProjects/myDev/venv/lib/python3.6/site-packages/flask/app.py", line 1832, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/myuser/PycharmProjects/myDev/venv/lib/python3.6/site-packages/flask/app.py", line 1818, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/myuser/PycharmProjects/myDev/venv/lib/python3.6/site-packages/flask_restplus/api.py", line 325, in wrapper
    resp = resource(*args, **kwargs)
  File "/Users/myuser/PycharmProjects/myDev/venv/lib/python3.6/site-packages/flask/views.py", line 87, in view
    self = view.view_class(*class_args, **class_kwargs)
TypeError: object() takes no parameters
INFO:werkwal:127.0.0.1 - - [24/Jun/2019 21:43:27] "GET /hello/ HTTP/1.1" 500 -

Если я попробую с этим маршрутом: @api.route('/<name1>/<name2>', methods=['GET']) и выполню от swagger его загрузку навсегда, и ничего не произойдет. Пока ошибка та же:

    ERROR:flask.app:Exception on /hello/ [GET]
Traceback (most recent call last):
  File "/Users/myuser/PycharmProjects/myDev/venv/lib/python3.6/site-packages/flask/app.py", line 1832, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/myuser/PycharmProjects/myDev/venv/lib/python3.6/site-packages/flask/app.py", line 1818, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/myuser/PycharmProjects/myDev/venv/lib/python3.6/site-packages/flask_restplus/api.py", line 325, in wrapper
    resp = resource(*args, **kwargs)
  File "/Users/myuser/PycharmProjects/myDev/venv/lib/python3.6/site-packages/flask/views.py", line 87, in view
    self = view.view_class(*class_args, **class_kwargs)
TypeError: object() takes no parameters
    INFO:werkwla:127.0.0.1 - - [24/Jun/2019 21:19:29] "GET /hello/?name1=mike&name2=sam HTTP/1.1" 500 -

Любая помощь приветствуется!

1 Ответ

1 голос
/ 25 июня 2019

Обновление: Вы импортируете flask_restful, а не flask_restplus в hello_controller. В этом примере есть несколько ошибок (я думаю, от копирования в SO). Поэтому трудно сказать, что является настоящей ошибкой или ошибкой копирования. Это лучшее, что я могу сделать без чистого примера, извините! Смотрите здесь примеры использования чертежей https://flask -restplus.readthedocs.io / en / stable / scaling.html # use-with-blueprints

...