如何正确地 redirect/submit POST 从表单 (wtforms) 到 REST api (flask-restless) 的请求?
How to correctly redirect/submit POST request from a form (wtforms) to a REST api (flask-restless)?
我找不到将数据从提交的表单重定向到 REST 的正确方法 api。
目前 - 如下例 - "POST" 方法在 view/route 中处理(参见路线 "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()])
View/route声明:
@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>
现在我想将 database/CRUD 相关操作委托给 REST api。
API 为 "Person" 数据模型生成的端点是:“/api/person”。
如果我将表单的 "action" 切换为:
"/add_person"
至:
"/api/person",
然后我被重定向到 API url,所以我想这不是一个正确的方法。
我认为我仍然应该使用 view/route 处理并在那里进行 POST api 调用,而不是保留 "Person" 对象。这是最干净的解决方案吗?我怎么能解决这个问题?
我会自己回答这个问题。
我最终保留了在 Flask 中处理的表单的“/add_person”POST 操作,然后使用 Python "requests" 库向 API 端点发出请求。
我找不到将数据从提交的表单重定向到 REST 的正确方法 api。
目前 - 如下例 - "POST" 方法在 view/route 中处理(参见路线 "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()])
View/route声明:
@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>
现在我想将 database/CRUD 相关操作委托给 REST api。
API 为 "Person" 数据模型生成的端点是:“/api/person”。
如果我将表单的 "action" 切换为:
"/add_person"
至:
"/api/person",
然后我被重定向到 API url,所以我想这不是一个正确的方法。
我认为我仍然应该使用 view/route 处理并在那里进行 POST api 调用,而不是保留 "Person" 对象。这是最干净的解决方案吗?我怎么能解决这个问题?
我会自己回答这个问题。 我最终保留了在 Flask 中处理的表单的“/add_person”POST 操作,然后使用 Python "requests" 库向 API 端点发出请求。