Flask中web表单学习

mac2025-10-06  1

web表单的学习

一,用html写form表单–html形式

二,用WTF写表单模板 --类形式

下边的代码中,有两种形式,一个是html形式,一个是WTF模板写的类形式… 最终生成的网页也是有两个输入账号密码的地方,其功能是一样的,但是一个是html形式—即所有的排版等内容均在html中写出;

下边的是web表单形式,代码相对简单,在html代码中是从<hr> 开始区分的,上边是传统HTML,下边是表单形式

需要import import Flask-WTF 研究这个的代码:

from flask import Flask,render_template,request,flash #导入wtf扩展的表单类 from flask_wtf import FlaskForm #导入自定义表单需要的字段 from wtforms import SubmitField,StringField,PasswordField #导入wtf扩展提供的表单验证器 from wtforms.validators import DataRequired , EqualTo # 解决编码问题 # import sys # sys.setdefaultencoding("utf-8") app = Flask(__name__) app.secret_key='sumer' ''' 目的:实现一个简单的登录的逻辑处理 1.路有需要有get和post两种请求方式-->xuyaopanduan qingqiufangshi 2.获取请求的参数 3.判断参数是否填写 & 密码是否相同 4.判断都没有问题,就返回一个success ''' ''' 给模板传递消息 flash -->需要对内容加密,因此需要设置secret_key,做加密消息的混淆 模板中需要遍历消息 ''' ''' 使用WTF实现表单 自定义表单类 ''' class LoginForm(FlaskForm): username=StringField('用户名:', validators=[DataRequired()]) password = PasswordField('密码:', validators=[DataRequired()]) password2 = PasswordField('确认密码:', validators=[DataRequired(),EqualTo('password', '密码输入不一致')]) submit = SubmitField('点击提交:') @app.route('/form',methods=['GET','POST']) def login(): login_form = LoginForm() #1. 判断请求参数 if request.method =='POST': # 2.获取请求参数 username = request.form.get('username') password = request.form.get('password') password2 = request.form.get('password2') # 3.验证参数,WTF可以一句话实现所有校验 if login_form.validate_on_submit(): # print(username,password) return 'success yes!' else: flash('参数有da误') return render_template('index.html', form=login_form) @app.route('/',methods=['GET','POST']) def index(): #request:请求对象-->获取请求方式,数据 #1. 判断请求参数 if request.method =='POST': #2.获取请求参数 username = request.form.get('username') password = request.form.get('password') passwor2 = request.form.get('password2') print(username,password) # 3.判断参数食肉填写,和密码是否相同 if not all([username,password,passwor2]): # print('参数不全') flash(u'参数不全') # u 意思utf8 elif passwor2 != password : # print('密码不一致') flash(u'密码不一致') else : return 'success' return render_template('index.html') if __name__ == '__main__': app.run(debug=True)

下边是html部分

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="post"> <label>用户名:</label><input type="text" name="username"><br> <label>密码:</label><input type="password" name="password"><br> <label>确认密码:</label><input type="password" name="password2"><br> <input type="submit" value="提交"><br> {# 使用遍历接受消息 #} {% for message in get_flashed_messages() %} {{ message }} {% endfor %} </form> <hr> <form method="post"> {{ form.csrf_token() }} {{ form.username.label }}{{ form.username }}<br> {{ form.password.label }}{{ form.password }}<br> {{ form.password2.label }}{{ form.password2 }}<br> {{ form.submit }}<br> </form> </body> </html>
最新回复(0)