API-интерфейс REST Python Flask для Windows Cherrypy - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь создать веб-API Python Flask REST.Поскольку сервер разработки Flask не подходит для производства, я попытался использовать сервер приложений cherrypy.

Ниже приводится приложение Flask, которое я пытался открыть с помощью cherrypy

from flask import Flask,request
from flask_restful import Api,Resource, reqparse

app= Flask(__name__)
api = Api(app)

class Main (Resource):
    def get(self):
        return "Hello Flask"

if __name__ == '__main__':
    api.add_resource(Main, "/testapp/")
    app.run(debug=True)

Ниже приведен сценарий cherrypy Iсоздали

try:
from cheroot.wsgi import Server as WSGIServer, PathInfoDispatcher
except ImportError:
    from cherrypy.wsgiserver import CherryPyWSGIServer as WSGIServer, WSGIPathInfoDispatcher as PathInfoDispatcher

from stack import app

d = PathInfoDispatcher({'/': app})
server = WSGIServer(('127.0.0.1', 8080), d)

if __name__ == '__main__':
   try:
      server.start()
      print("started")
   except KeyboardInterrupt:
      server.stop()

Я сохранил этот скрипт как "run.py" в моей директории проекта.Когда я запускаю это, это не показывает никакой ошибки, которая заставила меня задуматься, это правильно.

Но, к сожалению, я не могу получить доступ к этому, используя url

Теоретически, URL для этого API должен бытьчто-то вроде следующего: http://127.0.0.1:8080/testapp/

Но выдается 404 с сообщением

"Запрошенный URL-адрес не найден на сервере. Если вы ввели URL-адрес вручную, проверьте правильность написанияи попробуйте снова. "

Что я делаю не так?

1 Ответ

0 голосов
/ 21 октября 2018

api.add_resource(Main, "/testapp/")

в вашем файле stack.py не выполняется, если файл включен из вашего run.py в качестве условия

if __name__ == '__main__':
...

неверно (в контексте stack.py ).

Перемещение вызова в api.add_resource (...) впозиция вне if-main-условие (поэтому оно всегда выполняется) должна решить проблему.

...