2017-06-28 2 views
2

Ich kann keine geeignete Methode finden, um Daten von einem übermittelten Formular an eine REST-API umzuleiten.Wie wird die POST-Anfrage von einem Formular (wtforms) korrekt an eine REST api (flaschenruhig) weitergeleitet?

Derzeit - wie im Beispiel unten - wird die "POST" -Methode in der Ansicht/Route behandelt (siehe Route "add_person()").

Mein Beispieldatenmodell (SQLAlchemy-based):

class Person(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(20)) 

Formular für über HTML-Rendering (wtforms-basiert):

class PersonForm(FlaskForm): 
    name = TextField("Person name", validators=[DataRequired()]) 

Ansicht/Route Erklärung:

@views.route('add_person', methods=["GET", "POST"]) 
def add_person(): 
    form = PersonForm() 
    if request.method == 'POST' and form.validate_on_submit(): 
     person = Person() 
     person.name = form.name.data 
     db.session.add(person) 
     db.session.commit() 
     return redirect(url_for('view.add_person')) 
    return render_template('person_add.html', form=form)   

HTML-Vorlage:

<form method="POST" action="/add_person"> 
    {{ form.csrf_token }} 
    {{ form.name.label }} {{ form.name(size=20) }} 
    <input type="submit" value="Submit"> 
</form> 

Jetzt möchte ich Datenbank/CRUD-bezogene Aktionen an eine REST-API delegieren.

Der API-Endpunkt, der für ein Datenmodell "Person" generiert wird, lautet: "/api/person".

Wenn ich wechsle Form der "action" aus:

"/add_person" 

zu:

"/api/person", 

dann auf die API-URL umgeleitet ich, so dass ich denke, das ist nicht eine richtige Art und Weise zu tun, dass .

Ich denke, ich sollte immer noch die Ansicht/Route Handhabung und machen Sie einen POST-API-Aufruf dort, anstatt das "Person" -Objekt persistent. Ist das die sauberste Lösung? Wie könnte ich das angehen?

Antwort

0

Ich werde das selbst beantworten. Ich blieb am Bleiben mit Formular "/ add_person" POST-Aktion, die in Flask behandelt wird, und dann Anfrage an API-Endpunkt mit Python "Anfragen" Bibliothek.

Verwandte Themen