Flask中web表单学习

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>
发布了44 篇原创文章 · 获赞 5 · 访问量 1971
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章