【python】Flask如何利用flash提示登录失败

在开发登录和注册页面时,通过使用Python的Flask框架,可以在用户登录或注册失败时展示红色提示信息。这包括在视图函数中使用flash函数添加消息,如‘用户不存在’或‘账号或密码不正确’,然后在前端使用Jinja2模板语言获取并显示这些提示信息。错误消息显示在页面的特定位置,例如标题下方,具有特定的CSS样式。
部署运行你感兴趣的模型镜像

在编写登录或者注册页面时,一个必不可少的环节就是如何在用户登录失败或者注册失败时给出响应的提示信息,举个例子:

如何给出上述的红色提示信息呢?其实很简单,只需要两步。

第一步,在登录和主页的视图函数部分编写flash消息(@login是我注册的蓝图)。把它们放在条件判断失败的地方

@login.route('/', methods=['GET', 'POST'])
@login.route('/login', methods=['GET', 'POST'])
def login_():
    if request.method == 'POST':
        count = request.form['count']
        password = request.form['password']
        if not count or not password:
            flash('请输入账号和密码!')
            return redirect(url_for('login.login_'))
        user = User.query.filter_by(count=count).first()

        if not user:
            flash("用户不存在")
            return redirect(url_for('login.login_'))

        if count == user.count and user.check_password(password):
            login_user(user)  # 登入用户
            return redirect(url_for('login.index'))  # 重定向到主页

        flash('账号或密码不正确, 请重新登录!')  # 如果验证失败,显示错误消息
        return redirect(url_for('login.login_'))  # 重定向回登录页面
    return render_template('login.html')

@login.route('/register', methods=['GET', 'POST'])
def register():
    # 如果请求为post
    if request.method == 'POST':
        count = request.form.get('count')
        password = request.form.get('password')
        repassword = request.form.get('repassword')
        from app import db
        if password == repassword:
            user = User(count, password)
            user.set_password(password)
            db.session.add(user)
            db.session.commit()
            return redirect(url_for("login.login_"))
        else:
            flash("两次密码不一致!")
            return render_template("register.html")
    return render_template('register.html')

第二步,在前端页面利用jinja2模板语法接收flash消息,并把他们放在正确的位置。我这里选择放在h2标题正下方,样式是tip等会列出

======这是登录的页面=======
<div class="login-box">
    <h2 style="color: #ce8483; font-family: 华文彩云">榕城佳人</h2>
    <p class="tip">
        {% for item in get_flashed_messages() %}
            {{ item }}
        {% endfor %}
    </p>
    <form action="/login" method="post">
        <div class="login-field">
            <span style="color: aqua; size: 12px">账号</span>
            <input type="text" name="count" required=""/>
        </div>
        <div class="login-field">
            <spqn style="color: aqua; size: 12px">密码</spqn>
            <input type="password" name="password" required=""/>
        </div>
        <input type="submit" value="点击进入" id="myloginlabel">
        <p style="color: rgba(222,112,112,0.58)">没有账号?<a href="./register" style="color: rgba(22,180,166,0.58)"
                                                             onclick="topggleForm();">注册</a></p>
    </form>
</div>

======这是注册页面======
<div class="login-box">
    <h2>注册</h2>
    <p class="tip">
        {% for item in get_flashed_messages() %}
            {{ item }}
        {% endfor %}
    </p>
    <form action="/register" method="post">
        <div class="login-field">
            <span style="color: aqua; size: 12px">账号</span>
            <input type="text" name="count" required=""/>
        </div>
        <div class="login-field">
            <spqn style="color: aqua; size: 12px">密码</spqn>
            <input type="password" name="password" required=""/>
        </div>
        <div class="login-field">
            <spqn style="color: aqua; size: 12px">确认密码</spqn>
            <input type="password" name="repassword" required=""/>
        </div>
        <input type="submit" value="提交" id="myloginlabel">
        <p style="color: rgba(194,108,108,0.58)">已有账号?<a href="./login" style="color: rgba(22,180,166,0.58)"
                                                             onclick="topggleForm();">登录</a></p>
    </form>
</div>

这里是tip样式

.tip{
    font-size:14px;
    color: red;
    text-align: center;
    margin: 10px;
    margin-top: -10px;
}

这样子就可以搞定啦

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺坎普的风间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值