表单的处理一般都比较繁琐和枯燥,如果想简单的使用表单就可以使用Flask-WTF插件,同时我们把WTF融合到Bootstrap中这样样式的问题都自动解决了,本篇文章就为您讲解这些内容。
先要注意一点,在使用WTF的时候我们要在程序中设定一下SECRET_KEY,不然会出现"Must provide secret_key to use csrf"错误。
app.config['SECRET_KEY'] = 'xxxx'
Flask-Bootstrap在前面的文章中已经讲过了,不再重复。
后台WTF编码
先看实例:
from flask.ext.wtf import Formfrom wtforms import StringField, SubmitField, SelectFieldfrom wtforms.validators import DataRequiredclass BookForm(Form): name = StringField('姓名', validators=[DataRequired()]) phone = StringField('电话', validators=[DataRequired()]) photoset = SelectField('套系', choices=[('SET1', '1'), ('SET2', '2')]) submit = SubmitField("预定") @app.route('/book/', methods=['GET', 'POST'])def book_photo(): name = None phone = None photoset = None booker = BookForm() if booker.validate_on_submit(): name = booker.name.data phone = booker.phone.data photoset = booker.photoset.data return render_template('book_photo.html', form=booker, name=name, phone=phone, photoset=photoset)
BookForm是我们自己定义的一个Form对象,里面包含了两个文本框和一个下拉选择框,很简单。
class BookForm(Form): name = StringField('姓名', validators=[DataRequired()]) phone = StringField('电话', validators=[DataRequired()]) photoset = SelectField('套系', choices=[('SET1', '1'), ('SET2', '2')]) submit = SubmitField("预定")
validators是输入检查控制器,有很多种,这里使用的是DataRequired用于必填项的检查,还有字符长度以及输入类型等等好多控制器,需要说明一下在SelectField中不要使用这些不然会报错,这个地方我没有深入研究,暂时就不使用了,哈。
book_photo()是/book/的处理函数,我们初始化了文本框的默认为空,还初始化了BookForm对象,render_template函数指定了页面和form对象。
if booker.validate_on_submit(): name = booker.name.data phone = booker.phone.data photoset = booker.photoset.data
这段处理是在表单提交后的接收参数值的处理逻辑,同时还是用
return render_template('book_photo.html', form=booker, name=name, phone=phone, photoset=photoset)
返回了name,phone和photoset值到book_photo.html页面。
下面我们就来看下页面的代码
表单页面
{% extends "base.html" %}{% import "bootstrap/wtf.html" as wtf %}{% block page_content %} <div class="page-header"> 数据: <p> {% if name %} {{ name }} {% endif %} <br /> {% if phone %} {{ phone }} {% endif %} <br /> {% if photoset %} {{ photoset }} {% endif %} </p> </div> {{ wtf.quick_form(form) }}{% endblock %}
很简单吧,因为我们使用了bootstrap/wtf.html的基模板,很好的跟bootstrap结合起来。
重点是:
{{ wtf.quick_form(form) }}
我们利用wtf.quick_form函数自动生成了表单,非常cool对不对。
<div class="page-header"> 数据: <p> {% if name %} {{ name }} {% endif %} <br /> {% if phone %} {{ phone }} {% endif %} <br /> {% if photoset %} {{ photoset }} {% endif %} </p> </div>
这段是表单提交后显示提交数据的处理,所以我们在一个页面上就搞定了表单的显示和提交后的数据显示。
显示结果
还挺不错的是不是。
高级-重定向会话
我们提交表单后最后一个请求为POST,这样我们在刷新页面的时候会出现重新提交表单,通过重定向会话就可以解决这个问题(这个技巧称“Post/重定向/Get模式”),还有就是可以通过重定向会话实现自定义的跳转等更灵活的控制。
重定向会话我们要利用session机制实现,代码如下:
from flask import Flask, render_template, send_from_directory, session, redirect, url_for@app.route('/book/', methods=['GET', 'POST'])def book_photo(): name = None phone = None photoset = None booker = BookForm() if booker.validate_on_submit(): session['name'] = booker.name.data session['phone'] = booker.phone.data session['photoset'] = booker.photoset.data return redirect(url_for('book_photo')) return render_template('book_photo.html', form=booker, name=session.get('name'), phone=session.get('phone'), photoset=session.get('photoset'))
高级-Flash消息
如果需要页面通知用户消息的话,可以使用Flash消息,也很简单,代码如下:
from flask import Flask, render_template, send_from_directory, session, redirect, url_for, flash@app.route('/book/', methods=['GET', 'POST'])def book_photo(): name = None phone = None photoset = None booker = BookForm() if booker.validate_on_submit(): old_name = session.get('name') if old_name is not None and old_name != booker.name.data: flash('您的提交发生变化') session['name'] = booker.name.data session['phone'] = booker.phone.data session['photoset'] = booker.photoset.data return redirect(url_for('book_photo')) return render_template('book_photo.html', form=booker, name=session.get('name'), phone=session.get('phone'), photoset=session.get('photoset'))
判断字段值的变化,设置提示信息
if old_name is not None and old_name != booker.name.data: flash('您的提交发生变化')
页面上也需要处理:
{% extends "base.html" %}{% import "bootstrap/wtf.html" as wtf %}{% block page_content %} <div class="page-header"> 数据: <p> {% if name %} {{ name }} {% endif %} <br /> {% if phone %} {{ phone }} {% endif %} <br /> {% if photoset %} {{ photoset }} {% endif %} </p> </div> {% for message in get_flashed_messages() %}{{ message }} {% endfor %}{{ wtf.quick_form(form) }}{% endblock %}
通过for/endfor进行控制,也是使用的bootstrap的样式
{% for message in get_flashed_messages() %}<div class="alert alert-warning"> <button type="button" class="close" data-dismiss="alert">×</button> {{ message }}{% endfor %}
效果如下:

HTMLtagsdefinethestructureofawebpage,whileattributesaddfunctionalityanddetails.1)Tagslike,,andoutlinethecontent'splacement.2)Attributessuchassrc,class,andstyleenhancetagsbyspecifyingimagesources,styling,andmore,improvingfunctionalityandappearance.

HTML的未来将朝着更加语义化、功能化和模块化的方向发展。1)语义化将使标签更明确地描述内容,提升SEO和无障碍访问。2)功能化将引入新元素和属性,满足用户需求。3)模块化将支持组件化开发,提高代码复用性。

htmlattributesarecrucialinwebdevelopment forcontrollingBehavior,外观和功能

alt属性是HTML中标签的重要部分,用于提供图片的替代文本。1.当图片无法加载时,alt属性中的文本会显示,提升用户体验。2.屏幕阅读器使用alt属性帮助视障用户理解图片内容。3.搜索引擎索引alt属性中的文本,提高网页的SEO排名。

HTML、CSS和JavaScript在网页开发中的作用分别是:1.HTML用于构建网页结构;2.CSS用于美化网页外观;3.JavaScript用于实现动态交互。通过标签、样式和脚本,这三者共同构筑了现代网页的核心功能。

设置标签的lang属性是优化网页可访问性和SEO的关键步骤。1)在标签中设置lang属性,如。2)在多语言内容中,为不同语言部分设置lang属性,如。3)使用符合ISO639-1标准的语言代码,如"en"、"fr"、"zh"等。正确设置lang属性可以提高网页的可访问性和搜索引擎排名。

htmlattributeseresene forenhancingwebelements'functionalityandAppearance.TheyAdDinformationTodeFineBehavior,外观和互动,使网站互动,响应式,visalalyAppealing.AttributesLikutesLikeSlikEslikesrc,href,href,href,类,类型,类型,和dissabledtransfransformformformformformformformformformformformformformformforment

toCreateAlistinHtml,useforforunordedlistsandfororderedlists:1)forunorderedlists,wrapitemsinanduseforeachItem,RenderingeringAsabulleTedList.2)fororderedlists,useandfornumberedlists,useandfornumberedlists,casundfornumberedlists,customeizableWithTheTtheTthetTheTeTeptTributeFordTributeForderForderForderFerentNumberingSnumberingStyls。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。