python - Flask-RESTful 出现 404 错误?
python - Flask-RESTful get 404 error?
我遵循了 flask-RESTful
的 official docs,并且正在尝试实现第一个 hello world 演示。
起初,我将所有示例代码放在一个文件中,一切正常。
但是,当我将代码拆分为三个单独的文件时(试图使项目更有条理),我总是遇到 404 错误。
文件结构
.
├── app.py
├── app
├── __init__.py
├── __api__.py
└── venv
__init__.py
# -*- coding: utf-8 -*-
#initialization
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
api.py
# -*- coding: utf-8 -*-
from app import app, api
from flask_restful import Resource, Api
class HelloWorld(Resource):
def get(self):
return {'hello': 'world'}
api.add_resource(HelloWorld, '/')
app.py
# -*- coding: utf-8 -*-
from app import app
if __name__ == '__main__':
app.run(debug=True)
在 python 控制台中:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 250-643-552
127.0.0.1 - - [03/May/2016 22:35:20] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [03/May/2016 22:35:24] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [03/May/2016 22:38:15] "GET / HTTP/1.1" 404 -
怎么了?
编辑
我现在可以通过将 api.add_resource(HelloWorld, '/')
移动到 app.py
来获得预期的结果
app.py(已编辑)
# -*- coding: utf-8 -*-
from app import app, api
from app.api import HelloWorld
api.add_resource(HelloWorld, '/')
if __name__ == '__main__':
app.run(debug=True)
不明白为什么?
您以前的版本不起作用的原因是模块 api.py 从未加载,因此下面的代码(用于将 URI 映射到给定资源)未被执行:
api.add_resource(HelloWorld, '/')
实际上在您的 edited/latest 版本中,您不必重写 app.py 中的那行代码。相反,您只需要从 api.py.
导入一些东西
只是一个旁注,通常更经常使用装饰器 api.resource 来声明映射。
我遵循了 flask-RESTful
的 official docs,并且正在尝试实现第一个 hello world 演示。
起初,我将所有示例代码放在一个文件中,一切正常。
但是,当我将代码拆分为三个单独的文件时(试图使项目更有条理),我总是遇到 404 错误。
文件结构
.
├── app.py
├── app
├── __init__.py
├── __api__.py
└── venv
__init__.py
# -*- coding: utf-8 -*-
#initialization
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
api.py
# -*- coding: utf-8 -*-
from app import app, api
from flask_restful import Resource, Api
class HelloWorld(Resource):
def get(self):
return {'hello': 'world'}
api.add_resource(HelloWorld, '/')
app.py
# -*- coding: utf-8 -*-
from app import app
if __name__ == '__main__':
app.run(debug=True)
在 python 控制台中:
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 250-643-552
127.0.0.1 - - [03/May/2016 22:35:20] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [03/May/2016 22:35:24] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [03/May/2016 22:38:15] "GET / HTTP/1.1" 404 -
怎么了?
编辑
我现在可以通过将 api.add_resource(HelloWorld, '/')
移动到 app.py
app.py(已编辑)
# -*- coding: utf-8 -*-
from app import app, api
from app.api import HelloWorld
api.add_resource(HelloWorld, '/')
if __name__ == '__main__':
app.run(debug=True)
不明白为什么?
您以前的版本不起作用的原因是模块 api.py 从未加载,因此下面的代码(用于将 URI 映射到给定资源)未被执行:
api.add_resource(HelloWorld, '/')
实际上在您的 edited/latest 版本中,您不必重写 app.py 中的那行代码。相反,您只需要从 api.py.
导入一些东西只是一个旁注,通常更经常使用装饰器 api.resource 来声明映射。