送信されたフォームから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]
コメントを追加