位置: 编程技术 - 正文

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

  • 固定资产待抵扣进项税
  • 小规模增值税纳税申报
  • 承兑贴现几个点是月息还是年息
  • 无形资产登记什么明细账
  • 税后平均投资利息怎么算
  • 按季度申报,利润表中所得税费用怎么算出来的
  • 电子发票报销怎么用
  • 公益性捐赠支出属于营业外支出吗
  • 职工出差餐费计入什么科目
  • 金税三期个人所得税税率
  • 存货的坏账准备转回吗
  • 土地增值税清算比例的计算
  • 库存半成品属于什么会计科目
  • 农产品流通环节税收优惠政策
  • 教育附加费和地方教育附加费的计算
  • 一般户可以收货款么
  • 季度营业额超过6万需要补税
  • 个人所得税征收标准2023
  • 无形资产减值损失后能不能转回
  • 申请增值税一般计税方法的个体工商户可自
  • 利润表的以前年度损益调整影响利润总额吗
  • 补缴以前年度附加税
  • 长期股权投资权益法四个明细科目
  • 抖音自动抢福袋挂机软件哪个好
  • linux 密码重置
  • PHP:class_uses()的用法_spl函数
  • 年度应付职工薪酬在科目余额表哪里看
  • 减征增值税的项目
  • 双线服务器
  • 圣胡安教会9个遗物视频
  • 基金会债券收入吗
  • php yield 异步
  • 兰斯洛特
  • Centos6.5和Centos7 php环境搭建方法
  • 玩很多游戏的人
  • 《网络安全从入门到精通》
  • php destruct
  • 事业结余是事业单位当年全部收支相抵后的余额
  • 应交所得税的科目是什么
  • 企业做账会计分录流程
  • 交易性金融资产处置时的会计核算步骤
  • 增值税哪些行业不能抵扣
  • 印花税申报完成如何缴纳
  • 当期进项加计额怎么填
  • sql server2014使用
  • 如何查询继续教育ic卡号
  • 车间费用计入什么
  • 跨年进项发票怎样账务处理
  • 怎么算股本溢价
  • 税负率偏低
  • 企业运营工资
  • 补交以前年度的房产税会计分录
  • 应纳税所得额收入总额包括
  • 国际快递能发吗
  • 暂估的费用次年调增怎么做会计分录
  • 中小企业两账合一怎么办
  • 待摊费用是什么意思
  • windows自带的几个软件
  • windowsxp无法格式化
  • 如何关掉数据
  • windows xp sp3 vl
  • win10清理系统盘垃圾
  • windows7触摸
  • win8系统网络设置在哪里
  • JS写XSS cookie stealer来窃取密码的步骤详解
  • android.permission.interact_across_users_full
  • javascript事件委托的用法及其好处简析
  • 网络自定义怎么打开
  • shell脚本监控进程
  • unity资源包管理器
  • node.js windows
  • javascript cookbook
  • Android中dip、dp、sp、pt和px的区别
  • js怎么定义类
  • 移动应用界面设计形考1答案
  • 宁波地铁支付宝可以刷吗
  • 上海市国家税务局官网网站
  • 手机银行如何查询明细
  • 什么是双创服务平台
  • 分支机构如何变更为独立纳税人?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设