2017-10-31 1 views
1

Ich habe eine bestehende MySQL-Datenbank, und ich versuche, eine API für den Zugriff zu erstellen, aber ich erhalte einen 404-Fehler. Ich habe zwei Versionen von Code, die nicht funktionieren.bekommen 404 Fehler mit Kolben-unruhig

Könnte mir bitte jemand in die richtige Richtung zeigen?

URL Ich verwende: 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) 

URL Ich verwende: http://127.0.0.1:5000/api/email

+0

Welche URL verwenden Sie, um auf die API zuzugreifen? – PRMoureu

+0

@PRMoureu - http://127.0.0.1:5000/api/email – SO03112

+1

versuchen Sie mit http://127.0.0.1:5000/api/emails, der Tabellenname ist Plural – PRMoureu

Antwort

2

Mit flask-restless die Links erzeugt werden automatisch, wenn die Methode api_manager.create_api() calle ist d, mit diesem Format:

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

wo {tablename} die __tablename__ zum Modell Klasse gegeben ist, nicht der Klassenname in der Methode aufgerufen.

Das Dokument erwähnt ein Beispiel here.

+1

BTW, nicht sicher über die Version, die Sie verwenden, aber der Import könnte 'from flask_restless Import APIManager' zu vermeiden, eine veraltete Warnung – PRMoureu