2016-11-02 4 views
0

Ich bekomme immer einen Fehler auf der URL, wenn ich versuche, POST in meiner API zu implementieren. Ich bekomme immer wieder den Fehler in der URL, der besagt, dass METHOD für diese URL nicht zulässig ist. Fehle ich etwas? Funktioniert POST nicht direkt, wenn Sie versuchen, den Server zu öffnen? Ich bin soooo verloren.Flasche mit POST, PUT, DELETE

from flask import Flask, jsonify,json, request, abort 
from flask_sqlalchemy import SQLAlchemy 


app = Flask(__name__) 
app.config.from_pyfile('Config.py') 
db = SQLAlchemy(app) 
db.create_all() 

class JsonModel(object): 
    def as_dict(self): 
     return {c.name: getattr(self, c.name) for c in self.__table__.columns} 

class User(db.Model, JsonModel): 
    User_ID = db.Column(db.Integer, primary_key = True) 
    FirstName = db.Column(db.String(20)) 
    LastName = db.Column(db.String(20)) 

    def __init__(self,FirstName, LastName): 
     self.FirstName = FirstName 
     self.LastName = LastName 

class Todo(db.Model, JsonModel): 
    todo_ID = db.Column(db.Integer, primary_key = True) 
    UserID = db.Column(db.Integer, db.ForeignKey('User_ID')) 
    details = db.Column(db.String(30)) 

    def __init__(self,details): 
     self.details = details 

@app.route('/', methods = ['GET']) 
def index(): 
    return json.dumps([u.as_dict() for u in User.query.all()+Todo.query.all()]) 

@app.route('/todo/<int:UserID>', methods = ['GET']) 
def get(UserID): 
    return (list[Todo.query.get(UserID)]) 

@app.route('/p/', methods = ['POST']) 
def create_dev(): 
    if not request.json or not 'name' in request.json: 
    abort(400) 
    dev = Todo(request.json.details,request.json.get('details','')) 
    db.session.add(dev) 
    db.session.commit() 
    return json.dumps([{'dev': dev}]), 201 

if __name__ == '__main__': 
    app.run() 
+0

Auf welcher URL erhalten Sie diesen Fehler? – Fejs

+0

Es ist das/p/one, das mit POST zu tun hat –

+0

Sagt es, welche Methode nicht erlaubt ist? Meine Vermutung ist, dass Sie versuchen, Seite zu laden, indem Sie http: //some.address/p besuchen und app beschweren sich, weil Sie GET-Methode hier nicht behandelt haben. – Fejs

Antwort

0

Sie sollten die GET-Methode zur Liste der zulässigen Methoden hinzufügen. Wenn Sie versuchen, die Seite zu laden, müssen Sie zunächst die Seite selbst mithilfe der GET-Methode abrufen. Nachdem Sie etwas auf der Seite ausgefüllt haben, verwenden Sie die POST-Methode, um einige Daten an die App zu übergeben. In der App sollten Sie prüfen, mit welcher Methode die Funktion aufgerufen wird. So etwas wie dieses:

@app.route('/p', methods=['GET', 'POST']) 
def create_dev(): 
    if request.method == 'GET': 
     return render_template('p_page.html') 

    # If You get to this line, it means it is POST method 
    do_something_here() 
+0

Was bedeuten Sie, wenn Sie etwas auf der Seite ausfüllen? Ich kann nichts in den Browser hinzufügen. –

+0

Welche Daten senden Sie an die App? Ich nehme an, Sie haben ein Eingabefeld, Radiobutton, Drop-Down-Liste? – Fejs

+0

Ich mache keine App. Einfach eine grundlegende API, die Sachen von einer Datenbank erhält, setzt, udpates und löscht –