如何将变量传递到Flask HTML表单中
如何将变量传递到Flask HTML表单中
看起来你已经能通过手动输入完成用户添加操作了,现在想自动把Dinopass生成的密码填充到表单的密码输入框里对吧?我来给你一步步调整代码实现这个需求~
第一步:修改密码生成函数,让它返回密码
你的dinopass1函数现在只是获取了密码但没有返回它,我们先调整它,让它能把生成的密码传递出去:
def dinopass1(): response = requests.get("https://www.dinopass.com/password/simple") return response.text.strip() # 用strip()去掉可能带的换行或空白符
第二步:修改add_user路由,传递密码到模板
原来的add_user只处理了POST提交的逻辑,当用户第一次访问页面(GET请求)时,我们需要调用密码生成函数,把生成好的密码传给HTML模板:
@app.route("/add_user", methods=["GET", "POST"]) def add_user(): if request.method == "GET": # 生成密码并传给模板 generated_pass = dinopass1() return render_template("add.html", generated_pass=generated_pass) if request.method == "POST": headers = {"Authorization": f"{xxxx}"} new_user = { "username": request.form["name"], "passphrase": request.form["passphrase"] } requests.post( "API_URL", json=new_user, headers=headers ) # 修正原代码的语法错误:去掉url_for里多余的括号 return redirect(url_for("add_user"))
第三步:修改HTML模板,自动填充密码
在add.html的密码输入框里,用Jinja2语法把Flask传过来的密码填充到value属性中,这样页面加载后输入框就会自动显示生成的密码:
<form action="{{url_for('add_user')}}" method="POST"> <div class="form-group"> <label>Name:</label> <input type="text" class="form-control" name="name" required="1"> </div> <div class="form-group"> <label>Passphrase:</label> <!-- 用generated_pass填充输入框的默认值 --> <input type="text" class="form-control" name="passphrase" value="{{ generated_pass }}" required="1"> </div> <div class="form-group"> <button class="btn btn-primary mt-4" type="submit">Add</button> </div> </form>
补充说明
- 当用户访问
/add_user页面时(GET请求),Flask会先调用dinopass1生成密码,再把这个密码变量传给模板,模板会自动把密码填充到输入框里 - 提交表单时,这个自动生成的密码会和用户名一起被提交到后端逻辑,和你原来手动输入的流程完全一致
- 如果不想让用户修改这个自动生成的密码,可以给输入框加上
readonly属性:readonly="readonly"
备注:内容来源于stack exchange,提问作者bickyz
相关产品推荐
相关产品推荐

