POSTリクエストをフォーム(wtforms)からREST api(flask-restless)に正しくリダイレクト/送信するにはどうすればよいですか?

カード

送信されたフォームからRESTAPIにデータをリダイレクトする適切な方法が見つかりません。

現在、以下の例のように、「POST」メソッドはビュー/ルートで処理されます(ルート「add_person()」を参照)。

私のサンプルデータモデル(SQLAlchemyベース):

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

HTML経由でレンダリングするためのフォーム(wtformsベース):

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

ビュー/ルート宣言:

@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テンプレート:

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

ここで、データベース/ CRUD関連のアクションをRESTAPIに委任したいと思います。

「Person」データモデル用に生成されたAPIエンドポイントは「/ api / person」です。

フォームの「アクション」を次の場所から切り替えると、

"/add_person"

に:

"/api/person", 

次に、API URLにリダイレクトされるので、それは適切な方法ではないと思います。

「Person」オブジェクトを永続化する代わりに、ビュー/ルート処理を使用して、そこでPOSTAPI呼び出しを行う必要があると思います。これは最もクリーンなソリューションですか?どうすればこれにアプローチできますか?

カード

私はこれに自分で答えます。最終的に、Flaskで処理されるフォームの「/ add_person」POSTアクションをそのまま使用し、Pythonの「requests」ライブラリを使用してAPIエンドポイントにリクエストを送信しました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ