位置: 编程技术 - 正文

在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)

  • 增值税加计抵减怎么做账
  • 售后租回交易有哪几种不同的情况
  • 营业执照丢失公示几天才能注销
  • 预提工资计入哪个科目
  • 政府补助收入要交印花税吗
  • 工程结算方式分为
  • 没残值的固定资产有哪些
  • 企业所得税汇算清缴账务处理
  • 企业所得税业务费扣除标准
  • 核销贷款收回会计分录
  • 劳务派遣公司如何缴纳残疾人保障金
  • 增值税应纳所得额是什么意思
  • 什么计入在途物资
  • 增值税专用发票跨月退回怎么办?
  • 固定资产计提折旧的会计科目
  • 个体户需要记账嘛
  • 建设银行对公转账限额
  • 纯粮食白酒广告语
  • 注册资本需要缴清吗
  • 餐费没有发票怎么入账
  • 房地产预缴税金附加可以计提吗
  • 计提社保公司承担部分的会计分录
  • 鸿蒙工具箱巅峰模式有什么用
  • 不要运行指定的Windows应用程序怎么设置win10教程
  • windows无法配置用户文件
  • springboot整合了哪些框架
  • 营改增之前的房子现在出售怎么开票
  • laravel pay
  • 外汇返佣金
  • 利息增值税及附加计算
  • 捷税宝被稽查了吗
  • 不开票销售收入怎么做账务处理
  • 社保费怎么做记账凭证
  • python中fork函数
  • 员工借款未还离职怎么办
  • java变量初始化的两种方式
  • 应交税费应交增值税的三级科目有哪些
  • 小规模纳税人免税怎么做账
  • 定额发票验旧日期怎么算
  • MSSQL2005在networkservice权限运行附加数据库报(Microsoft SQL Server,错误: 5120)
  • 盈余公积弥补亏损不影响留存收益
  • 建筑工程施工围挡安装
  • 空调维修费入办公费还是修理费
  • 汇总记账凭证会计核算形式下总分类账账页格式一般采用
  • 提供维修业务的税率是多少
  • 可抵扣的进项税额要减去进项转出吗
  • 营改增无形资产
  • 进项税额转出有什么好处
  • 在税收方面属于什么领域
  • 公司货物发票进项高开还是低开
  • 实际费用以什么为准
  • 内部使用的收据可以做原始凭证吗
  • 认证抵扣发票
  • 装修公司购买材料,工程施工账务处理会计分录
  • 结账前要做哪些准备工作
  • windowxp音频驱动
  • centos7 tcp6
  • centos怎么配置dns
  • mac开机慢开机以后特别卡
  • macbook恢复macos
  • centos 7 dns
  • win8 休眠
  • 微软 系统设计
  • 命令窗口的作用
  • shell while
  • .css
  • javascript in
  • jquery选择器实例
  • node.js使用mysql
  • php实现登录功能
  • ugy与ngy
  • JavaScript中数组长度的属性
  • python中遍历
  • python UNIX_TIMESTAMP时间处理方法分析
  • 浅谈如何加强基层党组织建设
  • python内置数据结构有哪些
  • android8.0特性
  • 计算消费税为什么要除1-比例税率
  • 快递公司开票
  • 在江西税务网交医保流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设