【问题标题】:How to correctly redirect/submit POST request from a form (wtforms) to a REST api (flask-restless)?如何正确地将 POST 请求从表单(wtforms)重定向/提交到 REST api(flask-restless)?
【发布时间】:2017-12-01 17:21:00
【问题描述】:

我找不到将数据从提交的表单重定向到 REST api 的正确方法。

目前 - 如下例所示 - 在视图/路由中处理“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 相关的操作委托给 REST api。

为“Person”数据模型生成的 API 端点是:“/api/person”。

如果我从以下位置切换表单的“动作”:

"/add_person"

到:

"/api/person", 

然后我被重定向到 API url,所以我猜这不是正确的做法。

我认为我仍然应该使用视图/路由处理并在那里进行 POST api 调用,而不是持久化“Person”对象。这是最干净的解决方案吗?我怎么能接近这个?

【问题讨论】:

    标签: flask flask-wtforms flask-restless


    【解决方案1】:

    我会自己回答这个问题。 我最终坚持使用在 Flask 中处理的表单的“/add_person” POST 操作,然后使用 Python“requests”库向 API 端点发出请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-19
      • 2016-06-18
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      相关资源
      最近更新 更多