gpt4 book ai didi

python - 每个表单应该由不同的 python 函数(Flask)处理

转载 作者:太空宇宙 更新时间:2023-11-03 18:01:38 25 4
gpt4 key购买 nike

我有一个 Flask 网页,其中包含几个模态框。这些模态框包括表单。例如,一种模式包括用于更改用户密码的表单。另一个模式包括用于添加新用户的表单。等等

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

我可以使用一个表单来完成此操作,就像我使用登录表单所做的那样:

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'))

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

在模态页面上,如果用户填写“更改电子邮件”表单,则唯一的输入将是电子邮件地址。如果用户填写表格“更改密码”。唯一的输入是密码,而不是电子邮件。

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

最佳答案

为了区分用户发送给您的表单,您可以引入一个字段。您可以将具有相同名称的字段添加到所有需要的表单中,将其命名为“目标”或“表单”之类的名称,并将表单名称存储在其中。字段应呈现为隐藏的输入元素。然后在你的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'>用于登录表格。然后在 Flask 处理程序中读取该值 flask.request.form.get('target') - 如果是“登录”,您可以确定您正在处理登录表单。页面上其他类型的表单依此类推

关于python - 每个表单应该由不同的 python 函数(Flask)处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27593021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com