普通 Flask-Restless 应用程序上的 HTTP 404 错误
Posted
技术标签:
【中文标题】普通 Flask-Restless 应用程序上的 HTTP 404 错误【英文标题】:HTTP 404 errors on trivial Flask-Restless app 【发布时间】:2013-04-09 10:55:24 【问题描述】:我已经安装了Flask-Restless 并尝试运行quickstart app。所有请求都返回 404 错误(在 python 日志和 curl 响应中)。我的整个设置是:
$ virtualenv venv --distribute
$ source venv/bin/activate
$ pip install flask-restless
$ pip install flask-sqlalchemy # it doesn't appear to do this automatically
... Copy code from quickstart to "run.py" ...
$ python ./run.py
(another window)
$ curl -i http://127.0.0.1:5000/
run.py 的控制台输出是:
* Running on http://127.0.0.1:5000/
* Restarting with reloader
127.0.0.1 - - [16/Apr/2013 17:08:05] "GET / HTTP/1.1" 404 -
确实创建了test.db
,使用调试器我可以看到app.run()
确实执行了。
有趣的是,我得到与Eve 完全相同的行为。不过,我可以运行简单的 Flask 应用程序。
如果重要的话,这是 OS X 10.8 和 Python 2.7.3。
【问题讨论】:
【参考方案1】:来自 Flask-Restless documentation...
默认情况下,在上述代码示例中,Person 的 API 将是 可在
http://<host>:<port>/api/person
访问,其中人员部分 URL 的值是Person.__tablename__
:
我的猜测是,默认情况下,这些框架不会在路径/
上设置端点。它们只为与 API 中的实际对象相关的路径定义了端点。试试下面的...
curl -i http://127.0.0.1:5000/api/person
curl -i http://127.0.0.1:5000/person
这些 URL 实际上可能会到达您定义的端点。
【讨论】:
特别是它原来是curl http://127.0.0.1:5000/api/person
(这有点令人惊讶;我没有意识到它会小写它)。我曾假设根目录会给出某种 Django 风格的“这里是 API”。谢谢;这是一个真正的帮助。 Eve 的问题仍然存在,但这意味着这是 Eve 的问题,而不是我的常规设置。
在我研究文档时,小写字母来自 Flask-SQLAlchemy,它将 CamelCase
更改为 camel_case
。
[Slight Unrelated] 当心 url_prefix 和 _tablename_ 我花了三个小时试图弄清楚这一点。如果你有一个 model Person 例如:person_blueprint = manager.create_api_blueprint(Person, methods=['GET', 'POST', 'DELETE'], url_prefix="/api")
你的 url 应该看起来像 http://localhost:5000/api/person
在我的例子中,我以这种方式创建了一个蓝图 person_blueprint = manager.create_api_blueprint(Person, methods=['GET', 'POST', 'DELETE'], url_prefix="/person")
错误的 url_prefix 给我带来了很多 404 痛苦.以上是关于普通 Flask-Restless 应用程序上的 HTTP 404 错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 Flask-Restless 进行 GAE app.yaml 路由
使用 Flask-Restless 配置 Flask-SQLAlchemy 以使用多个数据库
为 Flask-Restless API 序列化 Python 箭头对象