位置: 编程技术 - 正文

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

  • 企业的罚款支出包括违约金吗
  • 增值税发票查询网络异常
  • 赞助支出和广告支出的区别
  • 资产负债表应收账款等于什么
  • 国债收益率如何定价
  • 从企业分红所得税怎么算
  • 不在经营范围内开票会受到什么惩罚
  • 市内打车费计入差旅费吗
  • 免税小规模企业开专票可以吗
  • 商品房空置费
  • 建造期间不可抗力因素入成本么
  • 普通增值税发票是否可以抵扣?
  • 一般纳税人农业增值税如何申报
  • 计提租金分录怎么处理
  • 买一送一的增值税如何计算例题
  • 全年一次性奖金计税方式2023
  • 个人交年金的多少有什么区别
  • 利息股息红利所得个人所得税怎么算
  • 个人缴纳物业费怎么开发票
  • 软件企业所得税两免三减半
  • 延期申报的程序
  • 合并报表利润表是当期还是累计
  • etc充值发票可以抵扣税吗
  • 安置残疾人员加计扣除
  • 购买固定资产如何记账
  • win7系统如何设置热点
  • 商誉减值可以避税吗
  • 收到财政局专项审计短信
  • 公司的实收资本是借款,但是利息由公司付,会计怎么做账
  • 如何向企业支付宝收款
  • linux grep显示行数
  • 可供出售金融资产现在叫什么
  • 出售无形资产的净损失不应计入
  • 中国各省市区域划分
  • 固定资产的折旧怎么算
  • 结转销售原材料会计分录
  • 阿布鲁佐的特点
  • html列表去掉点
  • 用php开发app
  • yolo改进方法
  • 图文处理是做什么工作
  • GPT-4:关于下一代人工智能模型的事实、谣言和期望
  • 法人股东分红要缴纳多少税
  • 塔吊租赁人工合同
  • 金税盘发票作废失败09D13D
  • 生产车间用电的进项税额可以抵扣吗
  • 不可抵消
  • 公司买卖股票亏损了 要交企业所得税吗
  • 进项税转出金额怎么算
  • 退回企业所得税的账务处理
  • 委托代销受托方会计分录
  • 捐赠 赞助 区别
  • 估价入库怎么记账
  • 企业股权转让收入会计处理
  • 收到货款未开发票是否违法
  • 支付贷款利息属于筹资活动吗
  • 社保账务如何做会计分录
  • 轿车折旧年限为几年
  • 国有企业公司制改造 发行企业债券
  • 账实不符怎么调账
  • 怎么统计每日产量
  • 索引的基本原则
  • 微软历代操作系统
  • mac移动硬盘怎么改名
  • windows10周年更新
  • win10蓝屏stopcode
  • 电脑游戏战争策略游戏
  • win8出现蓝屏怎么修复
  • win个性化设置没反应
  • win10查看驱动
  • cocos2dx schedule
  • cocos3d物理引擎
  • ie按钮不显示
  • 最流行的民宿装修设计
  • python模拟软件
  • 什么绑定什么服务
  • python安装后怎么用
  • 夫妻相聚
  • 留学生在美国买房子需要什么条件
  • 普惠性税收优惠政策例子
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设