Flask学习笔记--8

来源:互联网 发布:协方差矩阵退化 编辑:程序博客网 时间:2024/06/08 09:44

天啊,我这英文水平直线下降,也可能是错觉,主要是不能平静下来理解那些英文。
本来flask那些知识点就很抽象,然后再以不熟悉的英文出现,天啊,少了好多耐心。
要好好修炼一下。

Version–10

上篇文章中有WTForms用法的简单介绍。
把那些用法应用到自己的app代码中:

flaskapp.py:

from flask import Flask,render_template,requestfrom wtforms import StringField, SubmitField,validators, PasswordFieldfrom flask_wtf import Formapp = Flask(__name__)app.config.from_object('config')@app.route('/')def index():    return render_template("index.html")class RegisterForm(Form):    name = StringField('Name', [validators.Length(min=1, max=50)])    username = StringField('Username', [validators.Length(min=4, max=25)])    email = StringField('Email', [validators.Length(min=6, max=50)])    password = PasswordField('Password', [        validators.DataRequired(),        validators.EqualTo('confirm', message='Passwords do not match')    ])    confirm = PasswordField('Confirm Password')@app.route('/register',methods=["GET","POST"])def register():    form = RegisterForm()    if request.method == "POST" and form.validate():        return render_template("register.html",form=form)    return render_template("register.html",form=form)if __name__ == "__main__":    app.run(debug=True)

注:


  1. 从书上抄的英文,修炼一下。
  2. When using Flask-WTF, each web form is represented by a class that inherits from class Form.
  3. The class defines a list of fields in the form, each represented by an object.
  4. Each field object can have one or more validators attatched. Validators are functions that check whether the input submitted by the user is valid.
  5. The fields in the form are defined as class variables, and each class variable is assigned an objects associated with the field type.


  1. 首先从flask_wtf模块中导入Form基类(可以Flask_WTF扩展包中导入Form 类,不过wtforms模块中也有Form基类)
  2. 这里,Web表单由继承自 Form类的 RegisterForm()类表示(form = RegisterForm()语句)
  3. StringFields类表示属性为type=”text”的input元素(HTML笔记中有input元素的介绍)
  4. 同样,PasswordField类表示属性为type=”password”的input元素;SubmitFields类表示属性为type=”submit”的input元素
  5. 这里的name, email, username, password变量表示表单中字段(field, 蜜汁翻译),上面介绍过的StringField等
  6. 以name = StringField(‘Name’, [validators.Length(min=1, max=50)]) 为例:
    name变量为表单中的字段,(继承StringField基类中的内容)
    ‘Name’ 参数时把表单渲染成HTML时使用的标号;
    ‘validators’参数指定一个由验证函数组成的列表(password那儿验证条件两个),在接受用户提交的数据前验证数据,这里验证条件是输入字段在1-50字节之间。

register视图函数那一块儿:


  1. Web表单由继承自 Form类的 RegisterForm()类表示(form = RegisterForm()语句)
  2. 然后判断数据是不是通过 HTTP POST 方法提交的,再调用 validate() 函数来验证数据。如果验证通过,则 函数返回 True ,否则返回 False 。
  3. 最后调用render_template()函数渲染模板,form=form将表单传入register.html模板

register.html:

{% extends 'layout.html' %}{% block body %}  <h1>Register</h1>  {% from "includes/_formhelpers.html" import render_field %}  <form method="POST",action="">    <div class="form-group">      {{render_field(form.name,class="form-cotrol")}}    </div>    <div class="form-group">      {{render_field(form.email,class="form-cotrol")}}    </div>    <div class="form-group">      {{render_field(form.username,class="form-cotrol")}}    </div>    <div class="form-group">      {{render_field(form.password,class="form-cotrol")}}    </div>    <div class="form-group">      {{render_field(form.confirm,class="form-cotrol")}}    </div>    <p><input type="submit" class="btn btn-primary" value="Submit"></p>  </form>{% endblock %}

_formhelpers.html

{% macro render_field(field) %}  {{ field.label }}  {{ field(**kwargs)|safe }}  {% if field.errors %}    {% for error in field.errors %}      <span class="help-inline">{{ error }}</span>    {% endfor %}  {% endif %}{% endmacro %}

把表单传递给模板后就可以轻松渲染它们了
先写了一个 _formhelpers.html 模板,用来渲染带有一个标签的字段和错误列表。


  1. {% from “includes/_formhelpers.html” import render_field %} jinja2 中的语法,理解成从includes文件夹的_formhelpers.html模板中导入render_field函数。
  2. form 标签里method=”POST”,与视图函数中方法对应,action规定当提交表单时向何处发送表单数据。这里没有填,不影响的。(不往别处发送表单数据??)
  3. div 将name, email等分成不同的块,好看也更有意义。
  4. form.name 访问表单中的name,作为参数传入到render_field(field)函数。class=form-control, 自己设置的class属性,暂时用不到,不设置也没问题
  5. input中class属性对应的 class=”btn btn-primary”
    意思是对象有两个样式,即btn和btn-primary,btn样式来显示对象为按钮,btn-primary来指定按钮为基本样式按钮,颜色为蓝色

关于_formhelpers.html 模板:


  1. macro 关键词,理解成python中的 def。
  2. 等于在_formhelpers.html模板中定义了一个错误输出函数,当提交时验证到用户输入数据不通过,会输出错误信息。
  3. {{ }} for expressions to print to the template output(在这没看懂)
  4. **kwargs是可变的keyword arguments列表。
    想要在一个函数里处理带名字的参数, 可以使用**kwargs。
    **kwargs 允许你将不定长度的键值对, 作为参数传递给一个函数。
  5. WTForms 返回标准的 Python unicode 字符串,这里使用 |safe 过滤器告诉 Jinja2 这些数据已经经过 HTML 转义了。
  6. span 标签用来来组合行内元素,以便通过样式来格式化它们。这里对span运用了class属性。
    span 没有固定的格式表现。当对它应用样式时,它才会产生视觉上的变化。
  7. 然后就是jinjia2的语法内容了。

大概全都说通了,然后在register页面中查看效果:

这里写图片描述

什么都不输入,点击Submit按钮,会报错:

这里写图片描述

没有设置提交表单之后的响应,这里按照规则输入信息后也没什么变化。

之后就需要用MySQL来存储表单数据,然后做注册之后的登录页面,注册之后返回Home页面等等

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 值机迟到几分钟怎么办 婴儿坐飞机没带证件怎么办 飞机票买了一天降价1000怎么办 社保卡磁性没了怎么办 社保卡民族错了怎么办 坐飞机婴儿出生证明没带怎么办 手提行李超过5kg怎么办 随身行李超过5kg怎么办 南航机票填错身份证怎么办 两岁宝宝坐着驼背怎么办 两岁的宝宝坐晕车怎么办 在机场丢东西了怎么办 孩子放学不按时回家怎么办?转 右腿比左腿粗2cm怎么办 八个月宝宝小腿弯怎么办 南航航班取消了怎么办 高铁不能送老人怎么办 小孩买火车票没有身份证怎么办 断奶后孩子瘦了怎么办 两岁宝宝坐飞机哭闹怎么办 八个月宝宝坐飞机哭闹怎么办 六岁儿童发烧39度怎么办 孩子坐飞机没带证件怎么办 带孩子坐飞机需要什么证件怎么办 婴儿乘飞机没带证件怎么办 吃了轮状发烧怎么办 儿童票比打折票贵怎么办 订机票订错了怎么办 如果飞机不支持婴儿票怎么办 报志愿登不上去怎么办 微单自拍是反的怎么办 蜡笔弄到桌子上怎么办 油画颜料干透了怎么办 数字油画颜料干了怎么办 数字油画的颜料干了怎么办 丙烯颜料画错了怎么办 油画的油干了怎么办 数字油画没画完颜料干了怎么办? 涂完口红很干怎么办 吃鸡匹配不到人怎么办 电脑吃鸡更新慢怎么办