位置: 编程技术 - 正文

在Python的Flask框架中构建Web表单的教程(python框架flask系列)

编辑:rootadmin

推荐整理分享在Python的Flask框架中构建Web表单的教程(python框架flask系列),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python flask框架教程,python的flask框架,python中flask,python flask orm,python3 flask,python3 flask,python中flask,python flask orm,内容如对您有帮助,希望把文章链接给更多的朋友!

尽管Flask的request对象提供的支持足以处理web表单,但依然有许多任务会变得单调且重复。表单的HTML代码生成和验证提交的表单数据就是两个很好的例子。

Flask-WTF扩展使得处理web表单能获得更愉快的体验。该扩展是一个封装了与框架无关的WTForms包的Flask集成。

Flask-WTF和它的依赖集可以通过pip来安装:

1、跨站请求伪造(CSRF)保护默认情况下,Flask-WTF保护各种形式对跨站请求伪造(CSRF)攻击。一个CSRF攻击发生在一个恶意网站发送请求给受害者登录的其他网站。

为了实现CSRF保护,Flask-WTF需要应用程序去配置一个加密密钥。Flask-WTF使用这个密钥去生成加密令牌用于验证请求表单数据的真实性。下面将展示如何配置加密密钥。

示例hello.py:Flask-WTF配置

app.config字典通常是框架、扩展或应用程序自身存放配置变量的地方,可以使用标准字典语法添加配置值到app.config中。配置对象提供方法来从文件或环境导入配置值。

SECRET_KEY配置变量作为Flask和一些第三方扩展的通用加密密钥。加密的强度取决于这个变量的值。给你构建的每个应用程序选择不同的密钥,并确保这个字符串不被其他任何人知道。

注:为了提高安全性,密钥应该存储在一个环境变量中,而不是嵌入到代码中。这个会在第7章中描述。

2、表单类使用Flask-WTF时,每个web表单是由继承自Form类的子类来展现的。该类在表单中定义了一组表单域,每个都表示为一个对象。每个表单域都可以连接到一个或多个validators;validators是一个用于检查用户提交的输入是否合法的函数。

下面的示例展示了一个拥有文本框和提交按钮的简单web表单。

示例hello.py:表单类定义

表单中的域被定义为类的变量,且每个类的变量都指定一个表单域类型对象。在上一个示例中,NameForm表单有一个name文本框和submit提交按钮。StringField类表示一个type="text"属性的<input>标签。SubmitField类表示一个type="submit"属性的<input>标签。表单域构造函数的第一个参数是一个label,在渲染表单到HTML时会使用。

StringField构造函数包含可选参数validators,它定义了一组检查来验证用户提交的数据。Required()验证确保提交的表单域不为空。

注:Flask-WTF扩展定义了表单基类,所以它从flask.ext.wtf导入。表单域、验证都是直接从WTForms包中导入。下面的表格展示了一组WTForms支持的标准表单域。表格WTForms标准HTML表单域

下面则展示了一组WTForms内建验证。 WTForms验证

3、HTML渲染的表单表单域是可调用的,调用时从模板渲染它们到HTML。假设视图函数传递一个参数名为form的NameForm实例给模板,模板就会生成一个简单的HTML表单,如下所示:

当然,结果是什么都没有。为了改变表单的外观显示,任何发送给该表单域的参数会被转换为HTML表单域属性;例如,你可以给定表单域id或class属性,然后定义CSS样式:

即使有HTML属性,努力用这种方式渲染表单是非常重要的,所以最好是尽可能的使用Bootstrap自带的一系列表单样式。Flask-Bootstrap使用Bootstrap的预定义表单样式来提供高级的帮助函数来渲染整个Flask-WTF表单,这些操作都只需要一个调用即可完成。使用Flask-Bootstrap,上一个表单可以像下面这样来渲染:

import指令和常规的Python脚本一样的作用并且允许模板元素被导入并在许多模板中使用。被导入的bootstrap/wtf.html文件,定义了帮助函数使用Bootstrap来渲染Flask-WTF表单。wtf.quick_form()函数传入Flask-WTF表单对象并使用默认Bootstrap样式渲染它。示例4-3展示了完整的hello.py模板。

在Python的Flask框架中构建Web表单的教程(python框架flask系列)

示例 templates/index.html:使用Flask-WTF和Flask-Bootstrap渲染表单

目前模板的内容区有两块。第一块是类为page-header的div输出一个问候语。这里使用了模板条件判断语句。在Jinja2中格式为{% if variable %}...{% else %}...{% endif %}。如果判断条件为True则渲染if和else之间的内容。如果判断条件为False则渲染else和endif之间的内容。示例模板会渲染字符串“Hello, Stranger!”当name模板参数未定义的时候。第二块内容使用wtf.quick_form()函数渲染NameForm对象。

4、启动脚本顶层目录中的manage.py文件用于启动应用。这个脚本会在示例7-8中展示。

示例 manage.py:启动脚本

这个脚本开始于创建应用程序。使用环境变量FLASK_CONFIG,若它已经定义了则从中获取配置;如果没有,则是用默认配置。然后用于Python shell的Flask-Script、Flask-Migrate以及自定义上下文会被初始化。

为了方便,会增加一行执行环境,这样在基于Unix的操作系统上可以通过./manage.py来执行脚本来替代冗长的python manage.py。

5、需求文件应用程序必须包含requirements.txt文件来记录所有依赖包,包括精确的版本号。这很重要,因为可以在不同的机器上重新生成虚拟环境,例如在生产环境的机器上部署应用程序。这个文件可以通过下面的pip命令自动生成:

当安装或更新一个包之后最好再更新一下这个文件。以下展示了一个需求文件示例:

当你需要完美复制一个虚拟环境的时候,你可以运行以下命令创建一个新的虚拟环境:

当你读到这时,示例requirements.txt文件中的版本号可能已经过时了。如果喜欢你可以尝试用最近发布的包。如果遇到任何问题,你可以随时回退到需求文件中与应用兼容的指定版本。

6、单元测试这个应用非常小以至于不需要太多的测试,但是作为示例会在示例7-9中展示两个简单的测试定义。

示例 tests/test_basics.py:单元测试

编写好的测试使用的是来自于Python标准库中标准的unittest包。setUp()和tearDown()方法在每个测试之前和之后运行,且任何一个方法必须以test_开头作为测试来执行。

建议:如果你想要学习更多使用Python的unittest包来写单元测试的内容,请参阅官方文档。setUp()方法尝试创建一个测试环境,类似于运行应用程序。首先它创建应用程序配置用于测试并激活上下文。这一步确保测试可以和常规请求一样访问current_app。然后,当需要的时候,可以创建一个供测试使用的全新数据库。数据库和应用程序上下文会在tearDown()方法中被移除。

第一个测试确保应用程序实例存在。第二个测试确保应用程序在测试配置下运行。为了确保tests目录有效,需要在tests目录下增加__init__.py文件,不过该文件可以为空,这样unittest包可以扫描所有模块并定位测试。

建议:如果你有克隆在GitHub上的应用程序,你现在可以运行git checkout 7a来切换到这个版本的应用程序。为了确保你已经安装了所有依赖集,需要运行pip install -r requirements.txt。为了运行单元测试,可以在manage.py脚本中增加一个自定义的命令。

下面的例子展示如何添加测试命令。

示例 manage.pyt:单元测试启动脚本

manager.command装饰器使得它可以很容易的实现自定义命令。被装饰的函数名可以被当做命令名使用,且函数的文档字符串会显示帮助信息。test()函数的执行会调用unittest包中的测试运行器。

单元测试可以像下面这样执行:

7、数据库启动与单脚本的应用相比,重构后的应用使用不同数据库。

从环境变量中获取的数据库URL作为首选,默认SQLite数据库作为可选。三个配置中的环境变量和SQLite数据库文件名是不一样的。例如,开发配置的URL是从DEV_DATABASE_URL环境变量中获取,如果没有定义则会使用名为data-dev.sqlite的SQLite数据库。

无论数据库URL源的是哪一个,都必须为新的数据库创建数据库表。如果使用了Flask-Migrate来保持迁移跟踪,数据库表可以被创建或更新到最近的版本通过下面的命令:

相信与否,已经到了第一部分结束的地方。你现在已经学到了Flask必要的基本要素,但是你不确定如何将这些零散的知识组合在一起形成一个真正的应用程序。第二部分的目的是通过开发一个完整的应用程序来带领你继续前行。

使用Python的Flask框架构建大型Web应用程序的结构示例 虽然小型web应用程序用单个脚本可以很方便,但这种方法却不能很好地扩展。随着应用变得复杂,在单个大的源文件中处理会变得问题重重。与大多数

浅析AST抽象语法树及Python代码实现 在计算机科学中,抽象语法树(abstractsyntaxtree或者缩写为AST),或者语法树(syntaxtree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言

python下调用pytesseract识别某网站验证码的实现方法 一、pytesseract介绍1、pytesseract说明pytesseract最新版本0.1.6,网址:

标签: python框架flask系列

本文链接地址:https://www.jiuchutong.com/biancheng/387573.html 转载请保留说明!

上一篇:Python中规范定义命名空间的一些建议(python代码规范化)

下一篇:使用Python的Flask框架构建大型Web应用程序的结构示例(flask pycharm)

  • 增值税普通发票需要交税吗
  • 增值税专用发票怎么开
  • 年底计提是什么意思
  • 进项税为什么记在借方通俗讲法
  • 收据能入账抵税吗
  • 付款给对方的会计分录
  • 个体工商户开具增值税专用发票
  • 教育费附加会计分录
  • 营改增后取得土地转让
  • 子公司是否可以共享总公司的资质
  • 不锈钢材料开票
  • 增值税红字发票是什么意思
  • 财务报表申报错了怎么撤销
  • 免税收入税额的含义
  • 如何结转销售收入
  • win11如何降到win10
  • 公司交会费有什么用
  • Win10电脑重装系统要多少钱
  • win11电脑硬盘分区
  • 专有技术应当得到
  • 购买生产用品计入什么科目
  • opera software
  • PHP:mcrypt_module_close()的用法_Mcrypt函数
  • chormedriver安装
  • 单臂路由实验目的
  • laravel获取请求参数
  • 隐藏在草丛里
  • yii框架教程
  • 计算所得税不得扣除的税金
  • php下载文件夹
  • node js m1
  • 大数据找工作好找吗
  • 编译原理第三版
  • cssschool
  • python uiautomator2的点击操作
  • 减免残保金的操作方法
  • 收费公路通行费补费平台
  • 加油票发票抬头开错了
  • centos乱码,怎么修改成英文
  • 试生产期间发生事故后重新
  • dedecms建站
  • 织梦怎么改网站主页
  • 小规模纳税人增值税专用发票税率
  • 小型公司怎么做账
  • 往来会计和应收应付有什么区别
  • 如何让主营业务成本增加
  • 现金日记账一般采用数量金额式
  • 计提短期借款利息分录
  • 高速公路车辆通行卡没还怎么办
  • 上年度库存商品错误如何更正
  • 专项应付款余额转入资本公积的规定
  • 零申报资产负债表填0合适吗
  • 现金日记账的对账工作有哪些
  • 施工企业内部管理制度
  • mysql连接是什么协议
  • mysql怎么删除一定数量的记录
  • 值得收藏的一元硬币
  • win7/win8.1/win10系统下如何配置Java环境变量 Java环境变量的配置教程介绍
  • win8.1电脑设置在哪里
  • centos virsh
  • 如何让windows7更快
  • windows8怎么调整亮度
  • kb4012212安装失败
  • 电脑操作系统7
  • linuxftp服务器
  • win7 64位系统QQ自动退出重新登录提示您已登录不能重复登录的解决方法
  • 硬盘已经安装系统文件夹
  • cocos2d-x 3.4 windows 环境配置
  • 置顶在线
  • jquery设置自定义属性
  • 原生js import
  • javascript小数四舍五入多种方法实现
  • android颜色值
  • 浅谈python
  • js实现上下左右跳动
  • 在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信
  • javascript概述
  • html5 jquery
  • 商铺土地增值税预缴税率是多少
  • 西安车位过户需要多少费用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设