python - Flask-RESTful得到404错误?

时间:2016-05-03 14:48:14

标签: python rest flask flask-restful

我关注flask-RESTful的{​​{3}},我正在尝试实施第一个hello world演示。

首先,我将所有示例代码放在一个文件中,并且每件事情都可以。

但是,当我将代码分成三个独立的文件(试图使项目更加结构化)时,我总是遇到 404错误

档案结构

.
├── app.py
├── app
    ├── __init__.py
    ├── __api__.py
└── venv

__初始化__。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)

无法弄清楚原因?

1 个答案:

答案 0 :(得分:0)

您以前的版本不起作用的原因是模块api.py从未加载,因此下面的代码(用于将URI映射到给定资源)不会被执行:

api.add_resource(HelloWorld, '/')

实际上,在您编辑的/最新版本中,您不必在app.py中重写该行代码。相反,你只需要从api.py中导入一些东西。

只是旁注,通常情况下,装饰器api.resource通常用于声明映射。