|Flask Web开发-Web表单

Posted 多德伟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了|Flask Web开发-Web表单相关的知识,希望对你有一定的参考价值。

你不一定要点蓝字关注我的


写在前面

今天组会,有一种感觉就是我这一周忙的一批啊,可是仔细想想忙啥了,又说不上来,是我们确实没有做事,还是做了确想不起来~我觉得原因是我们的时间太碎片了,导致事情也被碎片了,没有整块的学习和做事,所以说不上来做什么,但是却又忙的不行。所以少玩手游,多听歌!哈哈


工欲善其事必先利其器~~~~~

1.histsite+endnote+印象笔记

2.订时间节点+善用PPT


总结整理很重要,具体使用方法参见:

https://study.163.com/course/courseLearn.htm?courseId=304003#/learn/video?lessonId=419017&courseId=304003

中科大罗昭峰老师录得非常好的教程!


好像每天都生活在干货中,可是收藏夹里的东西回头看的却很少,好奇就立刻去了解,收藏马克神马的都是在骗自己罢了~



昨天我们了解到Jinja2还支持宏,类似于Python代码中的函数。为了重复使用宏,我们可以将其保存在单独的文件中,然后在需要使用模板中导入。

(二)|Flask Web开发-Web表单

需要在多处重复使用的模板片段可以写入单独的文件,再包含在所有模板中,以避免重复:

(二)|Flask Web开发-Web表单

另一种重复使用代码的强大方式是模板继承,它类似于python代码中的类继承。

首先,创建一个名为base.html的基模板:

(二)|Flask Web开发-Web表单

Block标签定义的元素可在衍生模板中修改。

(二)|Flask Web开发-Web表单

Extends指令申明这个模板衍生自base.html。在extends指令之后,基模板中的三个块被重新定义,模板引擎会将其插入适当的位置。注意新定义的head块,在基模板中其内容不是空的,所以使用super()获取原来的内容。


3.2使用Flask-Bootstrap集成Twitter Bootstrap


Bootstrap是Twitter开发的一个开源框架,它提供的用户界面组件可用于创建整洁且具有吸引力的网页,而且这些网页还能兼容所有现代Web浏览器。


Bootstrap是客户端框架,因此不会直接涉及服务器。服务器需要做的只是提供引用了bootstrap层叠样式表(CSS)和javascript文件的HTML响应,并在HTML、CSS和Javascript代码中实例化所需组件。这些操作最理想的执行场所就是模板。

(二)|Flask Web开发-Web表单

Jinja2中的extends指令从Flask-Bootstrap中导入bootstrap/base.html,从而实现模板继承。Flask-Bootstrap中的基模板提供了一个网页框架,引入了Bootstrap中的所有CSS和Javascript文件。


在这个模板中,navbar块使用Bootstrap组件定义了一个简单的导航条。Content块中有一个<div>容器,其中包含一个页面头部。


Flask-Bootstrap中base.html模板还定义了很多其他块,都可在衍生模板中使用。


Doc:整个HTML文档

Html_attribs:<html>标签的属性

Html:<html>标签中的内容

Head:<head>标签中的内容

Title:<title>标签中的内容

Metas:一组<meta>标签

Styles:层叠样式表定义

Body_attribs:<body>标签的属性

Body:<body>标签中的内容

Navbar:用户定义的导航条

Content:用户定义的页面内容

Scripts:文档底部的JavasScript声明


如果要在衍生模板中添加新的JavaScript文件,需要这么定义scripts块:


(二)|Flask Web开发-Web表单

3.3自定义错误页面

像常规路由一样,Flask允许程序使用基于模板的自定义错误页面。最常见的错误代码有两个:


404,客户端请求未知页面或路由时显示;

500,有未处理的异常时显示。


这个两个错误代码指定自定义处理程序的方式如下:


(二)|Flask Web开发-Web表单

和视图函数一样,错误处理程序也会返回响应。它们还返回与该错误对应的数字状态码。


错误处理程序中引用的模板也需要编写。这些模板应该和常规页面使用相同的布局,因此要有一个导航条和显示错误信息的页面头部。


不仅如此,我们还可以在Flask-Bootstrap的基模板的基础上编写模板,从而使程序通过继承template/base.html模板编写自动以的404错误页面。


3.4连接

任何具有多个路由的程序都需要可以连接不同的页面的链接,例如导航条。


在模板中直接编写简单路由的URL链接不难,但对于包含可变部分的动态路由,在模板中构建正确的URL就很困难。而且,直接编写URL会对代码中定义的路由产生不必要的依赖关系。如果重新定义路由,模板中的链接可能会失效。


url_for()函数最简单的用法是以试图函数名(或者app.add_url_route()定义路由时使用的端点名)作为参数,返回对应的URL。


3.5静态文件

默认设置下,Flask在程序根目录中名为static的子目录中寻找静态文件。如果需要,可在static文件夹中使用子文件夹存放文件。服务器收到前面那个URL后,会生成一个响应,包含文件系统中static/css/styles.css文件的内容。


3.6使用Flask-Moment本地化日期和时间

如果服务器的用户来自世界各地,那么处理日期和时间可不是一个简单的任务。


服务器需要统一时间单位,这和用户所在的地理位置无关,所以一般使用协调世界时间。


有一个使用JavaSript开发的优秀客户端开源代码库,名为moment.js,它可以在浏览器中渲染日期和时间。Flask-Moment是一个Flask程序扩展,能把moment.js集成到Jinja2模板中。




第四章Web表单


尽管Flask的请求对象提供的信息足够用于处理Web表单,但是有些任务很单调,而且要重复操作。比如,生成表单的HTML代码和验证提交的表单数据。


4.1跨站请求伪造保护

默认情况下,Flask-WTF能保护所有表单免受跨站请求伪造的攻击。恶意网站把请求发送到被攻击者已登录的其他网站时就会引发CSRF攻击。

为了实现CSRF保护,Flask-WTF需要程序设置一个密钥。Flask-WTF使用这个密钥生成加密令牌,再用令牌验证请求时中表单数据的真伪。

(二)|Flask Web开发-Web表单

App.config字典可以用来存储框架,扩展和程序本身的配置变量。使用标准的字典句法就能把配置值添加到app.config对象中。这个对象还提供了一些方法,可以从文件或环境中导入配置值。


SECRET_KEY配置变量是通用密钥,可在Flask和第三方扩展中使用。加密的轻度取决于变量值的机密程度。不同的程序要使用不同的密钥,而且要保证其他人不知道你所用的字符串。


4.2表单类

使用Flask-WTF时,每个web表单都由一个继承自Form的类表示。这个类定义表单中的一组字段,每个字段都用对象表示。字段对象可附属一个或多个验证函数。

下面包含一个文本字段和一个提交按钮:

(二)|Flask Web开发-Web表单

这个表单中的字段都定位为类变量,类变量的值是相应字段类型的对象。Form基类由Flask-WTF扩展定义,所以从flask.ext.wtf中导入。字段和验证函数却可以直接从WTForms包中导入。


WTForms支持的HTML标准字段如下:

文本字段、多行文本字段、密码文本字段、隐藏文本字段、复选框、一组单选框、下拉列表、下拉列表可选择多个值、文本上传字段、表单提交按钮、把表单作为字段嵌入另一个表单、一组指定类型的字段。


WTForms内建的验证函数如下:


4.3把表单渲染成HTML

表单字段是可调用的,在模板中调用后会渲染成HTML。  

(二)|Flask Web开发-Web表单
(二)|Flask Web开发-Web表单
(二)|Flask Web开发-Web表单
(二)|Flask Web开发-Web表单

4.4在视图函数中处理表单

视图函数index()不仅要渲染表单,还要接受表单中的数据。

(二)|Flask Web开发-Web表单
(二)|Flask Web开发-Web表单

报错了!明天再说!


4.5重定向和用户对话

当用户刷新浏览器的时候,会看到一个莫名其妙的警告,要求在再次提交表单之前进行确认。为了避免这种情况的发生,我们需要重定向和用户回话:

(二)|Flask Web开发-Web表单

4.6Flash消息

请求完成后,有时候需要让用户知道状态发生了变化,这里可以使用确认消息,警告或者错误提醒。一个典型例子就是用户提交了一项错误的登录表单后,服务器发回的响应重新渲染了登录表单,并在表单上面显示一个消息,提示用户用户名或者密码错误。

(二)|Flask Web开发-Web表单

仅调用flash()函数并不能把消息显示出来,程序使用的模板要渲染这些消息,最好在基模板中渲染Flash消息,因为这样所有页面都能使用这些消息。Flask把get_flashed_messages()函数开放给模板,用来获取并渲染消息。

(二)|Flask Web开发-Web表单

在模板中使用循环是因为在之前的请求循环中每次调用flash()函数时都会生成一个消息,所以可能有多个消息在排队等待显示。


Get_flashed_messages()函数获取的消息在下次调用时不会再次返回,因此Flash消息只显示一次,然后后就消失了。

 

明天我们学习如何在Flask中使用数据库。



我今天才知道,我之所以漂泊就是在向你靠近。

--《廊桥遗梦》


以上是关于|Flask Web开发-Web表单的主要内容,如果未能解决你的问题,请参考以下文章

python web开发-flask访问请求数据request

python web开发-flask中访问请求数据request

Python 基于Flask的Web开发用户登录 注册

Flask:03-你离最美的web只差一个:bootstrap与表单

《flask web开发》第11章 博客文章发布表单无法显示的解决方案

Flask web 开发新手遇到的坑