2016-05-03 8 views
0

私はofficial docsflask-RESTfulに続いて、最初のhello worldデモを実装しようとしています。python - Flask-RESTfulは404エラーを取得しますか?

まず、すべてのサンプルコードを1つのファイルに入れて、すべてのものが正常に動作します。

しかし、コードを3つに分割して(プロジェクトをより構造化しようとすると)、私はいつもエラーを得ました。

ファイルstucture

. 
├── 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のpythonコンソールで

# -*- coding: utf-8 -*- 
from app import app 

if __name__ == '__main__': 
    app.run(debug=True) 

* 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 - 

間違っているのですか?


EDIT

私は今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) 

は理由を理解することはできません動きが期待する結果を得ることができますか?

答えて

0

あなたの以前のバージョンが動作しない理由は、そのモジュールのapi.pyがロードされることはありませんされるため、(特定のリソースへのURIをマッピングするための)コードの下に実行されません:

api.add_resource(HelloWorld, '/') 

実は編集した/最新のバージョンでは、app.pyでその行のコードを書き直す必要はありません。代わりに、api.pyから何かをインポートするだけです。

通常、マッピングを宣言するためにデコレータapi.resourceが使用されることがよくあります。

関連する問題