第四章:Web表单

Web表单

request.form能获取POST请求中提交的表单数据。

Flask-WTF 可以把处理Web表单的过程变成一种愉悦的体验。

跨站请求伪造保护

默认情况下,Flask-WTF能保护所有表单免受跨站请求伪造的攻击。
恶意网站把请求发送到被攻击者已登录的其他网站时就会引发CSRF攻击。
为了实现CSRF保护,FLASK-WTF需要程序设置一个密匙。Flask-WTF用密匙生成加密令牌,再用令牌验证请求中表单数据的真伪。

app.config字典可用来存储框架、扩展和程序本身的配置变量。

使用Flask-WTF时,每个Web表单都由一个继承自Form的类表示。每个类定义表单中的一组字段,每个字段都用对象表示。

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

可以使用Bootstrao中预定义好的表单样式渲染整个Flask-WTF表单:

{% imoport "bootstrap/wtf.html" as wtf %}
{{ wtf.quick_form(form) }}

wtf.quick_form()函数参数为Flask-WTF表单对象,使用Boootstrap的默认样式渲染传入的表单。

把POST加入方法列表很有必要,因为将提交表单作为POST请求进行处理更加便利,表单也可以作为GET请求提交,不过GET请求没有主题,提交的数据以查询字符串的形式附加到URL中,可在浏览器的地址栏中看到。

重定向

刷新页面时浏览器会重新发送之前已经发送过的最后一个请求。如果这个请求是一个包含表单数据的POST请求,刷新页面后会再次提交表单。所以,不要让POST作为最后一个响应。
使用重定向作为POST请求的响应,而不是使用常规响应。

重定向 是特殊的响应,响应内容是URL,而不是包含HTML代码的字符串。浏览器收到这种响应时,会向重定向的URL发起GET请求,显示页面的内容。所以,现在最后一个请求是GET请求,这个技巧称为 POST/重定向/GET模式

用户会话

程序可以把数据存储自用户会话中,在请求之间“记住”数据。用户会话是一种私有存储,存在于每个连接到服务器的客户端中。
用户会话,是请求上下文的变量,名为session。默认情况下,用户会话保存在客户端cookie中,使用设置的SECRET——KEY进行加密签名,如果篡改了cookie的内容,签名就会失效,会话也会随之失效。

Flash消息

请求完成后,有时需要让用户知道状态发生了变化,这里可以使用确认消息、警告或者错误提醒。
程序使用的模板要渲染flash()的这些消息。 get_flashed_messages() 用来获取并渲染消息。

在模板中使用循环是因为在之前的请求循环中没次调用flash()函数都会生成一个消息,所以可能有多个消息在排队等待显示,get_flashed_messages()函数获取的消息在下次调用时不会再次返回,因此Flasj消息只显示一次,然后就消失了。

posted @ 2017-03-30 15:06  Cheko  阅读(304)  评论(0编辑  收藏  举报