Flask form前后端交互消息闪现

模拟场景如果当用户注册时输入错误而由于form表单是同步提的交跳转到另一个网页时提示注册失败这时用户还需返回注册页面重新填写大大降低了客户体验,消息闪现能伪装成异步(实际还是同步)就是自己提交给自己然后进行验证的,大大提高了用户体验。

普通form:

  py文件

#flask的消息闪现依赖于flask库,用户发送的请求方式存储在request模块中
from flask import Flask,flash,render_template,request,session,redirect
#跳转依赖于redirect模块

app = Flask(__name__)


app.config.from_pyfile('config.ini')


#登陆成功后跳转
@app.route('/heloo')
def hello():
    return "hello 欢迎 %s" %session['name']

#指定请求方式,methods属性
@app.route('/',methods=['GET','POST'])
def index():
    #判断client发送的请求类型
    #自己请求自己的逻辑中,get只用来解析模板,而post用来判断数据逻辑
    if request.method == 'POST':
        #使用for属性来接收列表提交过来的数据
        username = request.form.get('username')
        passwored = request.form.get('password')
        passwored1 = request.form.get('password1')

        #模拟登陆 将用户名密码保存在session
        session['name'] = username
        session['password'] = passwored

        #判断数据是否同时存在,判断数据是否为空
        if not all([username,passwored,passwored1]):
            #利用闪现消息来提醒用户
            flash('参数不足')
        elif passwored != passwored1:
            flash("两次密码不一致")
        else:
            flash("注册成功")
            #第一种直接跳转网址
            return redirect('http://127.0.0.1:5000/heloo')
    #将定义好的表单类传递给模板,进行方法设置
    return render_template('day4_wtform.html',form = RegistefForm())

if __name__ == "__main__":
    app.run()

  html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Flask普通表单提交数据,使用flask消息闪现来将反馈显示给用户</title>
</head>
<body>
    <h1>用户注册</h1><br><br>
    {# action属性,如果不写,默认提交给自己,method属性,指定该表单的提交方式 #}
    <form method="POST">
        <label for="">用户名</label>
        <input type="text" name="username" placeholder="用户名">
        <br>
        <label for="">密码</label>
        <input type="password" name="password">
        <br>
        <label for="">确认密码</label>
        <input type="password" name="password1">
        <br>

        {# 将flash消息闪现和后台联系起来 #}
        {# 将消息闪现里面的所有消息遍历,取出需要返回给用户信息 #}
        {% for message in get_flashed_messages() %}
            {{message}}
        {% endfor %}

        <input type="submit" value="注册">
    </form>
</body>
</html>

 flask form扩展wtforms库

  py文件:

#flask的消息闪现依赖于flask库,用户发送的请求方式存储在request模块中,跳转依赖于redirect模块,render_template模板模块,session
from flask import Flask,render_template,request,flash,session,redirect
#导入wtf扩展的表单类
from flask_wtf import FlaskForm
#导入需要的字段
from wtforms import SubmitField,StringField,PasswordField

app = Flask(__name__)

app.config.from_pyfile('config.ini')
#定义一个类
class my_from(FlaskForm):
    #写好需要的form内需要的属性
    username = StringField('用户名')
    password = PasswordField('密码')
    password1 = PasswordField('确认密码')
    submit = SubmitField('注册') 
#注册成功跳转的页面
@app.route('/showlogin')
def indexx():
    #给模板传入参数
    return render_template('day4练习2.html',username = session['username'],password = session['password'])

#指定请求方式,methods属性
@app.route('/',methods=['POST','GET'])
def index():
    #判断请求
    if request.method == 'POST':
        # 获取form表单数据
        username = request.form.get('username')
        password = request.form.get('password')
        password1 = request.form.get('password1')
        #判断数据是否为空
        if not all([username,password,password1]):
            flash('信息部完整')
        #判断两次密码是否一致
        elif password != password1:
            flash('两次密码不一致')
        
        else:
            # 成功后给session加入数据
            session['username'] = username
            session['password'] = password
            flash('注册成功')
            #跳转页面
            return redirect('/showlogin')
    #导入模板和定义wtform属性的整个类
    return render_template('day4练习.html',my_from = my_from())

if __name__ == "__main__":
    app.run()

  html文件:

  wtform库数据的传入

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
   #指定请求方式  <form method="POST"> {{my_from.username.label}}:{{my_from.username}}<br> {{my_from.password.label}}:{{my_from.password}}<br> {{my_from.password1.label}}:{{my_from.password1}}<br> {% for i in get_flashed_messages() %} {{i}} {% endfor %} {{my_from.submit}} </form> </body> </html>

  显示注册好的账号和密码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    用户名:{{username}}<br>
    密码:{{password}}
</body>
</html>

 

转载于:https://www.cnblogs.com/Niuxingyu/p/10170933.html

layui是一个轻量级的前端UI框架,它提供了一种简单易用的方式来处理前后端数据交互。通过layui,前端开发者可以方便地操作DOM元素、发送Ajax请求以及处理响应。以下是layui实现前后端交互的基本步骤: 1. 引入layui库:首先需要在HTML文件中引入layui的CSS和JS文件。 ```html <link rel="stylesheet" href="https://unpkg.com/layui/dist/layui.css"> <script src="https://unpkg.com/layui/dist/layui.js"></script> ``` 2. 发送Ajax请求:layui封装了一个简单的$.ajax方法,称为layLayer.load(),用于异步加载数据。例如,获取服务器数据: ```javascript layui.use('layer', function () { var layer = layui.layer; layer.load({ url: '后台API地址', // 要请求的数据URL type: 'post' 或 'get', // 请求方式 data: { key: 'value' }, // 可选参数 success: function (res) { // 成功回调 console.log(res); // 更新页面内容 layer.msg(res.data); // 显示消息 }, error: function (err) { // 错误回调 console.error(err); } }); }); ``` 3. 数据绑定:接收后端返回的数据,可以用layui提供的模板引擎laytpl或者其他插件将数据渲染到页面上。 4. 表单提交:使用layui的form模块,可以轻松处理表单提交,并设置回调函数处理服务器响应。 ```javascript layui.use(['form', 'layer'], function () { form.render(); // 初始化表单 form.on('submit(frm)', function (data) { var formData = form.util.field.val(data.form); // 获取表单数据 $.post('提交API地址', formData, function (res) { if (res.success) { layer.msg('成功'); } else { layer.alert(res.message); } }); }); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值