如何在使用flask和flask_wtf表单时切换密码可见性?

Ali*_*med 6 html flask python-3.x

我刚刚开始学习 Flask,我想知道如何通过 html 中添加的按钮切换密码字段可见性,但我无法弄清楚。\n app.py

\n\n
from flask import Flask\nfrom flask import render_template, url_for, flash, redirect\nfrom forms import MyForm\n\napp = Flask(__name__)\napp.config[\'SECRET_KEY\'] = \'40928745c948f3f1e67703b23b49b9c5\'\n\n@app.route(\'/\', methods=(\'GET\', \'POST\'))\ndef home():\n    form = MyForm()\n    return render_template(\'home.html\', form=form)\n\nif __name__ == \'__main__\':\n    app.run(debug=True)\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

表格.py

\n\n
from flask_wtf import FlaskForm\nfrom wtforms import PasswordField\nfrom wtforms.validators import DataRequired\n\nclass MyForm(FlaskForm):\n    password = PasswordField(\'password\', validators=[DataRequired()])\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

首页.html

\n\n
<!DOCTYPE html>\n<html lang="en" dir="ltr">\n  <head>\n    <meta charset="utf-8">\n    <title>Sample</title>\n  </head>\n  <body>\n    <form method="POST" action="/">\n  {{ form.hidden_tag() }}\n  {{ form.name.label }} {{ form.name(size=20) }}\n  <input type="submit" value="Go">\n  <button type="button" name="">Show Password</button> <! \xe2\x80\x93\xe2\x80\x93 Using this button, toggle password visibilty -- !>\n</form>\n  </body>\n</html>\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我知道这{{ form.hidden_tag() }}是隐藏输入字段,但如何切换可见性?

\n

小智 6

您可以使用 JavaScript

首页.html

window.addEventListener("load", function(){
    var checkbox  = document.getElementById('{{form.check.id}}');
    var x = document.getElementById(''{{form.password.id}}'');
    checkbox.addEventListener('change', function() {
        if(this.checked) {
            x.type = 'text'; 
        } else {
            x.type = 'password'; 
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

表格.py

  class MyForm(FlaskForm):
  password = PasswordField('password', validators=[DataRequired()],id='password')
  show_password = BooleanField('Show password', id='check')
Run Code Online (Sandbox Code Playgroud)