代码我都是保持和教程一致的,到这里之前,都是完整没有问题的。
在命令行中输入flask run
后,效果如下:
goke@goke-PC MINGW64 /d/GitRepository/watchlist (master)
$ flask admin
Username: alexgoke
Password: 123
然后就卡住不动了,可以任意输入内容,回车键换行,但陷入这种模式跳不出来,只能强行关闭命令行终端,请问这个问题该如何解决呀?
我有对比本章节的源代码,没有发现问题。
# 生成管理员账户
@app.cli.command()
@click.option('--username', prompt=True, help='The username used to login.')
@click.option('--password', prompt=True,` hide_input=True,` confirmation_prompt=True, help='The password used to login.')
def admin(username, password):
"""Create user."""
db.create_all()
user = User.query.first()
if user is not None:
click.echo('Updating user...')
user.username = username
user.set_password(password) # 设置密码
else:
click.echo('Creating user...')
user = User(username=username, name='Admin')
user.set_password(password) # 设置密码
db.session.add(user)
db.session.commit() # 提交数据库会话
click.echo('Done.')
我是和书目保持一致的,因为初学,没有改动什么,就依照教程在往下走。麻烦您啦,帮我解答,非常感谢!
而且关于这里还有个问题,您的教程里说 hide_input=True
会使密码隐藏,但是命令行里输入密码的时候还是明文显示数字。(可能是我理解错了吧)
再贴一下实际演示图:
继续做一点补充:
强制关闭死循环的命令终端后,我尝试在网页里进行登陆。会报错如下:
我自己认为:应该就是无法有效生成管理员账户,所以登陆的验证语句
user = User.query.first()
# 验证用户名和密码是否一致
if username == user.username and user.validate_password(password): # 就是这一句出问题
login_user(user) # 登入用户
flash('Login Success.')
return redirect(url_for('index')) # 重定向到主页
会因为i没有 管理员username 而报错的。
所以在想,如何可以 ”有效生成管理员账户“ 呢?
个人思路,不知道对错,请大家指点,谢谢啦
最新情况:
我尝试对 password设置 的两项参数进行修改,hide_input 和 confimation_prompt
源代码都是开启,我通过控制变量修改并观察结果。
-
只关闭 hide_input
我尝试把 admin 功能的 password设置 修改为:hide_input=False
@click.option('--password', prompt=True, hide_input=False, confirmation_prompt=True, help='The password used to login.')
结果:正常了,可以自动出现二次确认密码,并且一切正常
-
只关闭 confimation_prompt
我尝试把 admin 功能的 password设置 修改为:confirmation_prompt=False
@click.option('--password', prompt=True, hide_input=True, confirmation_prompt=False, help='The password used to login.')
结果:没有改变,还是会卡住
-
hide_input 和 confimation_prompt 都关闭
我再次尝试把 admin 功能中的 password设置 修改为:hide_input=False, confirmation_prompt=False
@click.option('--password', prompt=True, hide_input=False, confirmation_prompt=False, help='The password used to login.')
结果:好了,可以创建管理员账户了,并且没有二次确认密码
综上所述:
问题就是在 hide_input == True (我又验证了很多次,的确这项设置打开的话,我的命令行就会卡住)
找到问题了,就是不知道原因了目前
1 个赞
首先非常感谢您的再次回复
那两个反引号不是我的原意,可能复制粘贴时候的 “手误”
现在代码真的是保持一致的。
问题就是在于:hide_input = True. 当我把它改为 False(关掉密码隐藏)就可以正常运行
一旦打开,就会输入完密码后,陷入跳不出来的问题
greyli
(Grey Li)
9
不客气。代码没问题的话问题要么出在命令行程序,要么就是 Click 的 bug,你可以试试换用 cmd.exe 或是 Powershell,看看问题能否复现。如果问题依旧,麻烦提供下 Click、Flask、Python 的版本。
我的各项版本号如下:
PS D:\GitRepository\watchlist\watchlist> pip list
Package Version
---------------- -------
Click 7.0
coverage 4.5.4
Flask 1.1.1
Flask-Login 0.4.1
Flask-SQLAlchemy 2.4.0
itsdangerous 1.1.0
Jinja2 2.10.1
MarkupSafe 1.1.1
pip 19.2.1
python-dotenv 0.10.3
setuptools 41.0.1
SQLAlchemy 1.3.6
Werkzeug 0.15.5
wheel 0.33.4
其中:
Click 7.0
Flask 1.1.1
Python 3.7.0
greyli
(Grey Li)
12
你好,我用 cmd.exe 和 PowerShell 测试均没有出现问题。再确认下?
winson
(winson)
13
今天做到这一步时遇到了一模一样的问题, 在windows的gitbash(mingw64)中确实会有异常, 但是在cmd中运行则没有出现问题.
今天做到这一步的时候也遇到了这个问题,依照作者的解决方案将hide_input换成False就没有问题了
1 个赞