Flask從入門到入土(三)——Web表單

简介:   Flask-WTF擴展可以把處理Web表單的過程變成一種愉悅的體驗。這個擴展對獨立的WTForms包進行了包裝,方便集成到Flask程序中。   Flask-WTF及其依賴可使用pip安裝: 1 pip install flask-wtf   跨站請求僞造保護   默認情況下,Flask-WTF能保護所有表單免受跨站請求僞造的攻擊。

  Flask-WTF擴展可以把處理Web表單的過程變成一種愉悅的體驗。這個擴展對獨立的WTForms包進行了包裝,方便集成到Flask程序中。

  Flask-WTF及其依賴可使用pip安裝:

1 pip install flask-wtf

  跨站請求僞造保護

  默認情況下,Flask-WTF能保護所有表單免受跨站請求僞造的攻擊。惡意網站把請求發送到被攻擊者已登錄的其他網站時就會引發CSRF攻擊。

  爲了實現CSRF保護,Flask-WTF需要程序設置一個密匙。Flask-WTF使用這個密匙生成加密令牌,再用令牌驗證請求中表單數據的真僞。設置密匙的方法如下:

1 app = Flask(__name__)
2 app.config['SECRET_KEY'] = 'hard to guess string'

  app.config字典可以用來存儲框架、擴展和程序本身的配置變量。使用標準的字典句發就能把配置值添加到app.config對象中。這個對象還提供了一些方法,可以從文件或環境中導入配置值。

  SECRET_KEY配置變臉是通用密匙,可在Flask和多個第三方擴展中使用,如其名,加密強度取決與變量值的機密程度。不同的程序要使用不同的密匙,而且要保證其他人不知道你所用的字符串。

  爲了增強安全性,密匙不應該直接寫入代碼,而要保存在環境變量中。

  表單類

  使用Flask-WTB時,每個WEB表單都由一個繼承自Form的類表示。這個類定義表單中的一組字段,每個字段都用對象表示。字段對象可附屬一個或多個驗證函數。驗證函數用來驗證用戶提交的輸入值是否符合要求。

 

1 from flask.ext.wtf import  Form
2 from wtforms import StringField,SubmitField
3 from wtforms.validators import Required
4 
5 class NameForm(Form):
6     name = StringField('what is your name?',validators=[Required()])
7     submit = SubmitField('Submit')

 

  這個表單中的字段都定義爲類變量,類變量的值是響應字段類型的對象。在這個實例中,NameForm表單中有一個名爲name的文本字段和一個名爲submit的提交按扭。StringField類表示屬性爲type="text"的<input>元素。SubmitField類表示屬性爲type="submit"的<input>元素。字段構造函數的第一個參數是把表單渲染成HTML時使用的標號。

  StringField構造函數中可選參數validators指定一個由驗證函數組成的列表,在接受用戶提交的數據之前驗證數據。驗證函數Required()確保提交的字段不爲空。

  Form基類由Flask-WTF擴展定義,所以從flask.ext.wtf中導入。字段和驗證函數卻可以直接從WTForms包中導入。

  WTForms支持的HTML標準字段如下:
  —————————————————————————————

    StringField       文本字段

    TextAreaField       多行文本字段

    PasswordField      密碼文本字段

    HiddenField     隱藏文本字段

    DateField      文本字段,值爲datatime.date格式

    DateTimeField    文本字段,值爲datatime.datetime格式

    IntegerField     文本字段,值爲整數

    DecimalField    文本字段,值爲decimal.Decimal

    FloatField      文本字段,值爲浮點數

    BooleanField    復選框,值爲True和False  

    RadioField       一組單選框

    SelectField      下拉列表

    SelectMultipleField 下拉列表,可選擇多個值

    FileField      文件上傳字段

    SubmitField        表單提交按扭

    FormField        把表單作爲字段嵌入另一個表單

    FieldList      一組指定類型的字段

  —————————————————————————————

  WTForms內建的驗證函數如下:

  —————————————————————————————

    Email       驗證電子郵件地址

    EqualTo      比較兩個字段的值,常用與要求輸入兩次密碼進行確認的情況

    IPAddress     驗證IPv4網絡地址

    Length        驗證輸入字符串的長度  

    NumberRange   驗證輸入的值在數字範圍內

    Optional        無輸入值時跳過其他驗證函數

    Required       確保字段中有數據

    Regexp      確保正則表達式驗證輸入值

    URL          驗證URL

    AnyOf       確保輸入字在可選值列表

    NoneOf       確保輸入值不在可選值列表

  —————————————————————————————

  把表單渲染成HTML

  表單字段是可調用的,在模板中調用後會渲染成HTML。假設視圖函數把一個NameForm實例通過參數form傳入模板,在模板中可以生成一個簡單的表單,如下:

1 <form method="POST">
2     {{form.hidden_tag()}}
3     {{form.name.label}} {{form.name()}}   
4     {{form.submit()}}
5 </form>

 

  當然這個表單還很簡陋。要想改進表單的外觀,可以把參數傳入渲染字段的函數,傳入的參數會被轉換成字段HTML屬性。例如,可以把字段指定id或class屬性,然後定義CSS樣式:

1  <form method="POST">
2      {{form.hidden_tag()}}
3      {{form.name.label}} {{form.name(id='my-text-field')}}   
4      {{form.submit()}}
5  </form>

  

 

目录
相关文章
|
6天前
|
开发框架 数据库 开发者
Web开发新境界:用Python玩转Django和Flask!
【6月更文挑战第12天】Python的Web开发框架Django和Flask各有千秋。Django是全能型框架,适合快速开发大型应用,提供ORM、模板引擎、URL路由和后台管理等全面功能。Flask则轻量级且灵活,适用于小型到中型应用,以其简单易用、高度可扩展和灵活路由著称。两者结合使用,能应对各种Web开发需求。
|
14天前
|
API 网络架构 开发者
Flask Web开发基础【路由和Jinja2模板引擎】
# Flask Web开发基础 Flask是轻量级Web框架,专注于核心功能:请求响应、模板渲染和URL路由。本文档介绍了使用Flask的基础知识,包括命令行和Python两种运行模式,以及如何修改入口文件、端口和地址。此外,还讨论了URL路由的概念和其在Flask中的实现,展示了动态路由和多URL绑定的例子。最后,提到了Jinja2模板引擎,解释了其基本语法,并通过电影列表案例展示了如何结合Flask使用模板。
29 1
|
12天前
|
移动开发 前端开发 数据安全/隐私保护
Web网页制作-知识点(2)——常用文本标签、列表标签、表格标签、Form表单、块元素与行内元素(内联元素)
Web网页制作-知识点(2)——常用文本标签、列表标签、表格标签、Form表单、块元素与行内元素(内联元素)
5 0
|
14天前
|
API 数据库 数据库管理
Flask Web开发基础:数据库与ORM实战
该文介绍了如何使用 Flask、SQLAlchemy 和 SQLite 实现数据库操作。首先,通过创建虚拟环境和安装 flask-sqlalchemy(版本2.5.1)及 sqlalchemy(版本1.4.47)来设置环境。接着,配置数据库URI,定义User和Movie模型类表示数据库表,并通过db.create_all()创建表。文章还展示了如何插入、查询、更新和删除记录,强调了db.session.commit()在保存更改中的关键作用。查询涉及filter、order_by等方法,提供了一系列示例。
298 1
|
18天前
|
存储 安全 数据库
使用Flask进行小型Web应用开发
【5月更文挑战第31天】本文介绍了使用Python的Flask框架开发小型Web应用的基本步骤和最佳实践。从环境搭建开始,确保安装Python和pip,然后通过`pip install Flask`安装Flask。创建应用涉及初始化Flask实例、定义路由函数处理HTTP请求,如`@app.route(&#39;/&#39;)`。Flask使用Jinja2模板引擎渲染HTML,如`render_template(&#39;about.html&#39;)`。为了集成数据库,可借助Flask扩展如Flask-SQLAlchemy或Flask-MongoEngine。
|
21天前
|
应用服务中间件 API nginx
使用Python和Flask构建RESTful Web API
使用Python和Flask构建RESTful Web API
31 0
|
21天前
|
存储 数据库连接 数据安全/隐私保护
使用Python和Flask构建一个简单的Web博客应用
使用Python和Flask构建一个简单的Web博客应用
25 0
|
29天前
|
缓存 API 数据库
构建高效Python Web应用:Flask框架与RESTful API设计原则
【5月更文挑战第20天】 在现代Web开发中,构建一个轻量级且高效的后端服务至关重要。本文将深入探讨如何使用Python的Flask框架结合RESTful API设计原则来创建可扩展和易于维护的Web应用程序。我们将通过分析Flask的核心特性,以及如何利用它来实现资源的合理划分、接口的版本控制和请求处理优化等,来指导读者打造高性能的API服务。文中不仅提供了理论指导,还包括了实践案例,旨在帮助开发者提升开发效率,并增强应用的稳定性和用户体验。
|
存储 Web App开发 索引
Flask 教程 第三章:Web表单
本文转载自:https://www.jianshu.com/p/54c74c565de3 这是Flask Mega-Tutorial系列的第三部分,我将告诉你如何使用Web表单。 在第二章中我为应用主页创建了一个简单的模板,并使用诸如用户和用户动态的模拟对象。
1796 0
|
1月前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
37 1

热门文章

最新文章