每个表单都应该从不同的python函数(Flask)进行处理

2024-04-25 16:51:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个烧瓶网页,其中包括几个情态。这些情态动词包括形式。 例如,一个模态,包括一个用于更改用户密码的表单。另一个模式包括一个用于添加新用户的表单。等等

我还有几个函数,可以处理从表单中获取的数据并更新数据库。在

我可以用一个表单完成,就像我使用登录表单一样:

def post(self):
        if 'logout' in flask.request.form:
            flask.session.pop('username', None)
            flask.flash("You've been succsessfuly logged out!")
            return flask.redirect(flask.url_for('login'))
        required = ['username', 'passwd']
        for r in required:
            if r not in flask.request.form:
                flask.flash("Error: {0} is required.".format(r))
                return flask.redirect(flask.url_for('login'))
        username = flask.request.form['username']
        passwd = flask.request.form['passwd']
        if username in users and users[username] == passwd:
            flask.session['username'] = username
            flask.flash("Login Succsessful!")
            userID = database().getID(username)
            flask.session['userID'] = userID
            flask.session['userEmail'] = database().getEmail(userID)
            flask.session['mNumber'] = database().getmNumber(userID)
            return flask.redirect(flask.url_for('index'))
        else:
            flask.flash("Username doesn't exist or incorrect password")
        return flask.redirect(flask.url_for('login'))

但这里只有两个变量,用户名和密码。两者都是必需的,我知道输入的只是那些变量。在

在带有modals的页面上,如果用户填写了“Change-Mail”表单,那么唯一的输入将是电子邮件地址。如果用户填写“更改密码”表格。唯一的输入将是密码,而不是电子邮件。在

我现在的问题是,如何在flask应用程序中确定用户填写的表单,以便相应地处理数据?在


Tags: 用户informurl密码flask表单for
1条回答
网友
1楼 · 发布于 2024-04-25 16:51:40

为了区分用户发送给您的表单,可以引入一个字段。您可以将同名字段添加到所有需要的表单中,将其命名为“target”或“form”,并将表单名称存储在其中。字段应呈现为隐藏的输入元素。然后在flask代码中使用if/elif/else来读取输入值并决定它是哪种形式。在

还有更干净的解决方案:使用WTForm或Django表单。它们以不同的方式为每个输入名称添加表单前缀,这样就不会再有问题了,发送了哪个表单,谁需要处理数据。你为什么不用一个呢?他们还有很多额外的好处。在

为了解释第一个解决方案,下面是引导示例库中的示例表单:

<form class="form-signin" role="form">
    <h2 class="form-signin-heading">Please sign in</h2>
    <label for="inputEmail" class="sr-only">Email address</label>
    <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
    <label for="inputPassword" class="sr-only">Password</label>
    <input type="password" id="inputPassword" class="form-control" placeholder="Password" required>
    <div class="checkbox">
      <label>
        <input type="checkbox" value="remember-me"> Remember me
      </label>
    </div>
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>

您可以做的是将新的隐藏字段添加到表单中:<input type='hidden' name='target' value='singin'>用于登录表单。{handler>你可以在这个符号框中读到。对于页面上其他类型的表单,依此类推

相关问题 更多 >