使用 flask-restless 得到 404 错误

Posted

技术标签:

【中文标题】使用 flask-restless 得到 404 错误【英文标题】:getting 404 error using flask-restless 【发布时间】:2018-04-13 01:33:38 【问题描述】:

我有一个现有的 mysql 数据库,我正在尝试创建一个 API 来访问它,但我收到了 404 错误。我有两个版本的代码不起作用。

有人可以指点我正确的方向吗?

我正在使用的网址:http://127.0.0.1:5000/api/email

v1:

from flask import Flask
from flask.ext.restless import APIManager
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://pathtodb/emails'
db = SQLAlchemy(app)

class Email(db.Model):
    __tablename__ = 'emails'
    id = db.Column(db.Integer, primary_key=True)
    status = db.Column(db.String(20))
    email = db.Column(db.String())

    def __init__(self, status, email):
        self.status = status
        self.email = email

api_manager = APIManager(app, flask_sqlalchemy_db=db)
api_manager.create_api(Email, methods=['GET', 'POST', 'DELETE', 'PUT'])

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

v2:

from flask import Flask
from flask.ext.restless import APIManager
from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base

app = Flask(__name__)
Base = declarative_base()
engine = create_engine('mysql+pymysql://pathtodb/emails', echo=True)
metadata = MetaData(bind=engine)

class Email(Base):
    __tablename__ = Table('emails', metadata, autoload=True)
    id = Column(Integer, primary_key=True)
    status = Column(String(20))
    email = Column(String())


api_manager = APIManager(app, flask_sqlalchemy_db=engine)
api_manager.create_api(Email, methods=['GET', 'POST', 'DELETE', 'PUT'])

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

我正在使用的网址:http://127.0.0.1:5000/api/email

【问题讨论】:

你使用什么 url 来访问 api ? @PRMoureu - 127.0.0.1:5000/api/email 试试127.0.0.1:5000/api/emails,表名是复数 @PRMoureu 我虽然需要使用类名“电子邮件”,但我需要按照您的建议使用表名。我想将此标记为答案,但我不能,因为它是评论。谢谢,如果您愿意回答,我会将其标记为已解决。 我认为这是一个错字,但你是对的,它可能会造成混淆 【参考方案1】:

对于flask-restless,链接会在调用api_manager.create_api() 方法时自动生成,格式如下:

'http://127.0.0.1:5000/api/tablename'  # default domain and port

其中tablename 是赋予模型类的__tablename__,而不是方法中调用的类名。

文档提到了一个例子here。

【讨论】:

顺便说一句,不确定您使用的版本,但导入可能是 from flask_restless import APIManager 以避免出现弃用警告

以上是关于使用 flask-restless 得到 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 flask-restless 对 POST 的错误请求与关系

使用flask-restless实现超媒体

如何使用 Flask-Restless 启用 CORS

使用 flask-restless 创建 API 响应

如何查询使用 Flask-restless 设置的 API

使用 Flask-Restless 进行 GAE app.yaml 路由