表单

作者: 垃圾桶边的狗 | 来源:发表于2019-03-12 23:17 被阅读0次

一、过滤器

概述:

将模板中变量的值 经过模板函数 过滤后在进行输入展示

  1. abs 绝对值
  2. default 默认值 默认为变量不存在则执行默认值
    {{ var|default('默认值') }}
    bool = False
    {{ bool|default('默认值',boolean=True) }}
  3. first 获取值得第一个字符
  4. last 获取值得最后一个字符
  5. format 格式化
    {{ "我叫%s,我见年%d岁了 我的存款为%.2f"|format('张三',20,103) }}
  6. length 返回长度值
  7. safe 正常展示html代码 不进行转义
  8. int 转换为整形
  9. float 转换为浮点形
  10. list 转换为列表
  11. lower 转换为小写
  12. upper 转换为大写
  13. striptags 去除html代码
  14. trim 去除俩测空白字符

二、原生表单

form1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="{{ url_for('form') }}" method="post">
    <p>用户名: <input type="text" name="username"></p>
    <p>密码: <input type="password" name="userpass"></p>
    <p><input type="submit" value="submit"></p>
</form>
</body>
</html>

manage.py

#原生表单
@app.route('/form/',methods=['GET','POST'])
def form():
    if request.method == 'GET':
        return render_template('form1.html')
    if request.method == 'POST':
        print(request.form)
        return '接收表单'

三、flask-wtf扩展库

表单扩展库 提供了csrf,表单校验等功能

安装:

pip3 install flask-wtf

四、常见字段类型 和 验证器

(1) 字段类型

字段类型 字段说明
StringField 普通文本字段
SubmitField 提交按钮
PasswordField 密码输入框
HiddleField 隐藏域
TextAreaField 多行文本域
DateField 日期字段
DateTimeField 日期时间字段
IntegerFIeld 整形字段
FloatField 浮点字段
BooleanField bool类型字段
RadioField 单选
SelectField 下拉
FileField 文件上传

(2) 常见验证器

验证 说明
DateRequired 必填
Email 邮箱地址
IPAddress IP地址
Length 内容的长度 有max 和min
NumberRange 值的范围 min和max
EqualTo 验证俩个字段是否相同
URL 验证URL地址
Regexp 正则匹配

注册实例(测试版)

manage.py

from flask import Flask,request,render_template
from flask_script import Manager
from flask_wtf import FlaskForm #导入表单基类
from wtforms import StringField,PasswordField,SubmitField
from wtforms.validators import DataRequired,Length,EqualTo,Email

app = Flask(__name__)
app.config['SECRET_KEY'] = 'SECRET_KEY'
maanger = Manager(app)

#自定义表单注册类
class Register(FlaskForm):
    #username为当前标签的name值 用户名为到那个前标签展示的左侧的label标签 点击用户名 出发当前标签选中节点
    username = StringField('用户名',validators=[DataRequired('请输入用户名'),Length(min=6,max=12,message='用户名长度范围在6~12位之间')])
    userpass = PasswordField('密码',validators=[DataRequired('请输入密码'),Length(min=6,max=12,message='密码长度范围在6~12位之间')])
    confirm = PasswordField('确认密码',validators=[DataRequired('请输入确认密码'),EqualTo('userpass',message='密码和确认密码不一致')])
    email = StringField('邮箱',validators=[DataRequired('请输入邮箱地址'),Email(message='请输入正确的邮箱')])
    submit = SubmitField('注册')

#注册
@app.route('/register/',methods=['GET','POST'])
def register():
    form = Register() #实例化表单类
    #这个方法是实现表单校验功能的 csrf,数据正确性 都通过了 则为真 否则为假
    if form.validate_on_submit():
        # print(request.form)
        print(form.username) #拿到username的整个标签
        print(form.username.data) #取出username里面的value值
        return '数据提交过来了'
    return render_template('register.html',form=form)


if __name__ == '__main__':
    maanger.run()

form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>flask-wtf的表单类</h2>
<form action="{{ url_for('register') }}" method="post">
    {{ form.csrf_token }}
    {{ form.username.label }}
    {{ form.username(style="color:red;",class='myself',placeholder='请输入用户名...') }} #给当前的标签添加属性和值 关键字参数
    #循环迭代取出验证失败的错误信息(也就是你在验证器里的属性message的值)
    {% for error in form.username.errors %}
        <span style="color:red;">{{ error }}</span>
    {% endfor %}
    <br>
    {{ form.userpass.label }}
    {{ form.userpass }}
    {% for error in form.userpass.errors %}
        <span style="color:red;">{{ error }}</span>
    {% endfor %}
    <br>
    {{ form.confirm.label }}
    {{ form.confirm() }}
    {% for error in form.confirm.errors %}
        <span style="color:red;">{{ error }}</span>
    {% endfor %}
    <br>
    {{ form.email.label }}
    {{ form.email() }}
    {% for error in form.email.errors %}
        <span style="color:red;">{{ error }}</span>
    {% endfor %}
    <br>
    {{ form.submit() }}
</form>
</body>
</html>

form.html 宏定义的表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{# 定义表单宏 #}
{% macro filed(att) %}
    <tr>
        <td>{{ att.label() }}</td>
        <td>{{ att() }}</td>
        {% for error in att.errors %}
        <td style="color:red;">{{ error }}</td>
        {% endfor %}
    </tr>
{% endmacro %}
<form action="" method="post">
<table>
    {{ filed(form.username) }}
    {{ filed(form.userpass) }}
    {{ filed(form.confirm) }}
    {{ filed(form.email) }}
    <tr>
        <td>{{ form.submit() }}</td>
    </tr>
</table>
</form>
</body>
</html>

使用bootstrap渲染表单

{% extends 'common/base.html' %}
{% block title %}
    注册
{% endblock %}
{% from 'bootstrap/wtf.html' import quick_form %}
{% block pagecontent %}
    <div class="row">
        <div class="col-md-8">.col-md-8</div>
        <div class="col-md-4">{{ quick_form(form) }}</div>
    </div>
{% endblock %}

(3) 自定义表单验证器

在表单类中添加验证方法

导入验证失败的错误提示方法

from wtforms.validators import ValidationError
# 需求,帮我去查看表单中的用户名和邮箱是否在用户表中已存在
def validate_username(self,field):
    # print(field.data)
    # print(self.username.data)
    #     if User.objects.filter(username=field.data).exists()
    if field.data == 》'zhangsan':
        raise ValidationError('该用户已存在 请重新输入')
        #验证邮箱
def validate_email(self,field):
     if field.data == '793390457@qq.com':
        raise ValidationError('该邮箱已存在 请重新输入')

(4) 登录实例

#登录表单类
class Login(FlaskForm):
    username = StringField('用户名',validators=[DataRequired(message='用户名不能为空'),Length(min=6,max=12,message="用户名长度为6~12位之间")])
    userpass = PasswordField('密码', validators=[DataRequired('请输入密码'), Length(min=6, max=12, message='密码长度范围在6~12位之间')])
    submit = SubmitField('登录')

#登录
@app.route('/login/',methods=['GET','POST'])
def login():
    form = Login()
    if form.validate_on_submit():
        print(request.form)
    return render_template('user/login.html',form=form)

登录模板和注册模板一样

(5) 所有的字段和验证器

from flask import Flask,render_template,request
from flask_script import Manager
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from wtforms import SubmitField,HiddenField,TextAreaField,DateField,DateTimeField,IntegerField,FloatField,BooleanField,RadioField,SelectField,FileField,StringField
from wtforms.validators import IPAddress,NumberRange,URL,Regexp

app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcdesdfdsfsfs'
bootstrap = Bootstrap(app)
manager = Manager(app)

#测试表单模型类
class Test(FlaskForm):
    hidde = HiddenField()
    info = TextAreaField('个人简介',render_kw={'style':'resize:none','placeholder':'默认值'})
    datefield = DateField('日期',format='%Y/%m/%d')
    datetimefield = DateTimeField('日期和时间')
    integerfield = IntegerField('整形')
    floatfield = FloatField('浮点数')
    boolfield = BooleanField('布尔值')
    radiofield = RadioField('性别',choices=[(0,'男'),(1,'女')])
    selectfield = SelectField('地址',choices=[('1001','北京'),('1002','上海')])
    filefield = FileField('文件上传')
    ip = StringField('ip地址',validators=[IPAddress(message='输入有效的ip地址')])
    age = IntegerField('年龄',validators=[NumberRange(min=6,max=70,message='年龄范围在6~70之间')])
    url = StringField('资源地址',validators=[URL(message='您输入的资源地址不存在')])
    iphone = IntegerField('手机号码',validators=[Regexp('^1[3-8][0-9]{9}$',message='请输入正确的手机号码')])
    iphone = StringField('手机号码',validators=[Regexp('^1[3-8][0-9]{9}$',message='请输入正确的手机号码')])
    submit = SubmitField('test')


@app.route('/test/',methods=['GET','POST'])
def test():
    form = Test()
    form.hidde.data = '我是默认值'
    form.radiofield.data = '0'
    form.selectfield.data = '1002'
    if form.validate_on_submit():
        print(request.form)
        return '过来了'
    return render_template('testwtf.html',form=form)

相关文章

  • bootstrap之form表单

    表单布局 垂直表单(默认) 内联表单 水平表单 垂直表单或基本表单(display:block;) 创建基本表单的...

  • 【读书笔记+思考】移动设备表单设计

    在移动界面中,常见的表单模式有:登录表单;注册表单;核对表单;计算表单;搜索表单;多步骤表单;长表单等 登录表单:...

  • bootstrap表单

    表单布局 垂直表单(默认) 内联表单 水平表单 垂直表单或基本表单 基本的表单结构是 Bootstrap 自带的,...

  • bootstrap 表单布局的三种方式

    三种 垂直表单(默认) 内联表单 水平表单 垂直表单 效果 内联表单 效果 水平表单 效果 参考:https://...

  • 表单相关总结

    表单?表单作用:收集用户信息。表单组成:表单域、表单控件、提示信息。 表单域常用属性 常用属性: name=...

  • 网页设计:HTML表单标签

    表单包含三个基本组成部分:表单标签、表单域、表单按钮。 1,表单标签 HTML 表单用于收集用户输入,表单使用 ...

  • 2019-04-09 表单(5)

    表单布局Bootstrap 提供了下列类型的表单布局: 垂直表单(默认) 内联表单 水平表单 1.垂直或基本表单 ...

  • 动态表单实现

    angular动态表单 地址: angular表单 vue动态表单 地址: vue表单

  • bootstrap表单

    垂直表单(默认) 内联表单 水平表单 垂直表单 也称基本表单基本的表单结构是 bootstrap 自带的创建基本表...

  • 前端视频-day3(1)

    表单 表单不是表格,表单的核心是数据。 表单标签的构成和形式: 表单项 下面是我写的一个简单的注册表单 注意:表单...

网友评论

      本文标题:表单

      本文链接:https://www.haomeiwen.com/subject/ukqapqtx.html