目录
后台WTF编码
表单页面
高级-重定向会话
高级-Flash消息
首页 web前端 html教程 Flask学习笔记-在Bootstrap框架下Web表单WTF的使用_html/css_WEB-ITnose

Flask学习笔记-在Bootstrap框架下Web表单WTF的使用_html/css_WEB-ITnose

Jun 24, 2016 am 11:25 AM

表单的处理一般都比较繁琐和枯燥,如果想简单的使用表单就可以使用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">&times;</button>    {{ message }}{% endfor %}
登录后复制

效果如下:

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1673
14
CakePHP 教程
1428
52
Laravel 教程
1333
25
PHP教程
1277
29
C# 教程
1257
24
HTML:结构,CSS:样式,JavaScript:行为 HTML:结构,CSS:样式,JavaScript:行为 Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML,CSS和JavaScript的未来:网络开发趋势 HTML,CSS和JavaScript的未来:网络开发趋势 Apr 19, 2025 am 12:02 AM

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML的未来:网络设计的发展和趋势 HTML的未来:网络设计的发展和趋势 Apr 17, 2025 am 12:12 AM

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML与CSS vs. JavaScript:比较概述 HTML与CSS vs. JavaScript:比较概述 Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTML与CSS和JavaScript:比较Web技术 HTML与CSS和JavaScript:比较Web技术 Apr 23, 2025 am 12:05 AM

HTML、CSS和JavaScript是构建现代网页的核心技术:1.HTML定义网页结构,2.CSS负责网页外观,3.JavaScript提供网页动态和交互性,它们共同作用,打造出用户体验良好的网站。

HTML:是编程语言还是其他? HTML:是编程语言还是其他? Apr 15, 2025 am 12:13 AM

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增强WebevebDevelopment。

超越HTML:网络开发的基本技术 超越HTML:网络开发的基本技术 Apr 26, 2025 am 12:04 AM

要构建一个功能强大且用户体验良好的网站,仅靠HTML是不够的,还需要以下技术:JavaScript赋予网页动态和交互性,通过操作DOM实现实时变化。CSS负责网页的样式和布局,提升美观度和用户体验。现代框架和库如React、Vue.js和Angular,提高开发效率和代码组织结构。

&lt; strong&gt;,lt; b&gt;有什么区别标签和lt; em&gt;,&lt; i&gt;标签? &lt; strong&gt;,lt; b&gt;有什么区别标签和lt; em&gt;,&lt; i&gt;标签? Apr 28, 2025 pm 05:42 PM

本文讨论了HTML标签,和和关注其语义与表现用途及其对SEO和可访问性的影响之间的差异。

See all articles