创建管理员部分,运行命令flask admin后,可正常输入username与password后,不会自动出现后续内容


#1

代码我都是保持和教程一致的,到这里之前,都是完整没有问题的。
在命令行中输入flask run后,效果如下:

    goke@goke-PC MINGW64 /d/GitRepository/watchlist (master)
    $ flask admin
    Username: alexgoke
    Password: 123

然后就卡住不动了,可以任意输入内容,回车键换行,但陷入这种模式跳不出来,只能强行关闭命令行终端,请问这个问题该如何解决呀?

我有对比本章节的源代码,没有发现问题。


#2

麻烦提供这个 admin 命令对应的代码。


#3
# 生成管理员账户
@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.')

我是和书目保持一致的,因为初学,没有改动什么,就依照教程在往下走。麻烦您啦,帮我解答,非常感谢!:smiley:

而且关于这里还有个问题,您的教程里说hide_input=True 会使密码隐藏,但是命令行里输入密码的时候还是明文显示数字。(可能是我理解错了吧:sweat_smile:

再贴一下实际演示图:


#4

继续做一点补充:
强制关闭死循环的命令终端后,我尝试在网页里进行登陆。会报错如下:

我自己认为:应该就是无法有效生成管理员账户,所以登陆的验证语句

        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 而报错的。

所以在想,如何可以 ”有效生成管理员账户“ 呢?

个人思路,不知道对错,请大家指点,谢谢啦


#5

最新情况:
我尝试对 password设置 的两项参数进行修改,hide_input 和 confimation_prompt
源代码都是开启,我通过控制变量修改并观察结果。

  1. 只关闭 hide_input
    我尝试把 admin 功能的 password设置 修改为:hide_input=False
    @click.option('--password', prompt=True, hide_input=False, confirmation_prompt=True, help='The password used to login.')
    结果:正常了,可以自动出现二次确认密码,并且一切正常

  2. 只关闭 confimation_prompt
    我尝试把 admin 功能的 password设置 修改为:confirmation_prompt=False
    @click.option('--password', prompt=True, hide_input=True, confirmation_prompt=False, help='The password used to login.')
    结果:没有改变,还是会卡住

  3. 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 (我又验证了很多次,的确这项设置打开的话,我的命令行就会卡住)

找到问题了,就是不知道原因了目前


#6

你这里多了两个反引号,去掉试试呢?


#8

首先非常感谢您的再次回复

那两个反引号不是我的原意,可能复制粘贴时候的 “手误”:sweat_smile:
现在代码真的是保持一致的。
问题就是在于:hide_input = True. 当我把它改为 False(关掉密码隐藏)就可以正常运行

一旦打开,就会输入完密码后,陷入跳不出来的问题:mask:


#9

不客气。代码没问题的话问题要么出在命令行程序,要么就是 Click 的 bug,你可以试试换用 cmd.exe 或是 Powershell,看看问题能否复现。如果问题依旧,麻烦提供下 Click、Flask、Python 的版本。


#10

看样子是在MinGW64环境下使用有点问题。


#11

我的各项版本号如下:

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

#12

你好,我用 cmd.exe 和 PowerShell 测试均没有出现问题。再确认下?