随笔分类 -  Flask

学习flask的笔记
摘要:单个表单多个提交按钮 在某些情况下,可能需要为一个表单添加多个提交按钮。比如在创建文章的表单中添加发布按钮和存草稿的按钮。当用户提交表单时,需要在视图函数中根据按下的按钮来做出不同的处理。 下面例子中创建了一个表单,save按钮用于保存,publish表示发布,正文字段使用TextAreaField 阅读全文
posted @ 2019-03-17 22:53 夏晓旭 阅读(5812) 评论(0) 推荐(0)
摘要:使用Flask-CKEditor集成富文本编辑框 富文本编辑器即所见即所得编辑器,类似于文本编辑软件。它提供一系列按钮和下拉列表来为文本设置格式,编辑状态的文本样式即最终呈现出来的样式。在Web程序中,这种编辑器也称为HTML富文本编辑器,因为它使用HTML标签来为文本定义样式。 CKEditor是 阅读全文
posted @ 2019-03-17 22:51 夏晓旭 阅读(4282) 评论(0) 推荐(0)
摘要:文件上传 在HTML中,渲染一个文件上传字段只需要将<input>标签的type属性设为file,即<input type=”file”>。 这会在浏览器中渲染成一个文件上传字段,单击文件选择按钮会打开文件选择窗口,选择对应的文件后,被选择的文件名会显示在文件选择按钮旁边。 在服务器端,可以和普通数 阅读全文
posted @ 2019-03-17 22:43 夏晓旭 阅读(37651) 评论(1) 推荐(2)
摘要:自定义验证器 在WTForms中,验证器是指在定义字段时传入validators参数列表的可调用对象,下面来看下编写自定义验证器。 除了使用WTForms提供的验证器来验证表单字段,我们还可以在表单类中定义方法来验证特定字段,例如: form/form.py: 针对特定字段的验证器 当表单类中包含以 阅读全文
posted @ 2019-03-17 22:38 夏晓旭 阅读(3566) 评论(0) 推荐(0)
摘要:在模板中渲染表单时,有大量的工作: 1、调用字段属性,获取<input>定义 2、调用对应的label属性,获取<label>定义 3、渲染错误消息 为了避免为每一个字段重复这些代码,我们可以创建一个宏来渲染表单字段 macro.html: 这个form_field()宏接收表单类实例的字段属性和附 阅读全文
posted @ 2019-03-17 22:34 夏晓旭 阅读(987) 评论(0) 推荐(0)
摘要:在模板中渲染错误消息 InputRequired验证器和DataRequired很相似,但InputRequired仅验证用户是否有输入,而不管输入的值是否有效。例如,有空格组成的数据也会通过验证。当是DataRequired时,如果用户输入的数据不符合字段要求,比如在IntegerField输入非 阅读全文
posted @ 2019-03-11 22:46 夏晓旭 阅读(2344) 评论(0) 推荐(0)
摘要:在视图函数中验证表单 因为现在的basic_form视图同时接受两种类型的请求:GET请求和POST请求。所以我们要根据请求方法的不同执行不同的代码。具体来说,首先是实例化表单,如果是GET请求,就渲染模板;如果是POST请求,就调用validate()方法验证表单数据。 请求的HTTP方法可以通过 阅读全文
posted @ 2019-03-11 22:42 夏晓旭 阅读(748) 评论(0) 推荐(0)
摘要:处理表单数据 表单数据的处理涉及很多内容,从获取数据到保存数据大致有以下步骤: 1、 解析请求,获取表单数据 2、 对数据进行必要的转换,比如讲勾选框的值转换成python的布尔值 3、 验证数据是否符合要求,同时验证CSRF令牌。 4、 如果验证未通过则需要生成错误消息,并在模板中显示错误消息。 阅读全文
posted @ 2019-03-11 22:38 夏晓旭 阅读(13306) 评论(0) 推荐(0)
摘要:在模板中渲染表单 为了能够在模板中渲染表单,我们需要把表单类实例传入模板。首先在视图函数里实例化表单类LoginForm,然后再render_template()函数中使用关键脑子参数form将表单实例传入模板,例如:form/app.py 在模板中,需要调用表单类的属性即可获取字段对应的HTML代 阅读全文
posted @ 2019-03-11 22:33 夏晓旭 阅读(2327) 评论(0) 推荐(0)
摘要:使用Flask-WTF处理表单 扩展Flask-WTF继承了WTFforms,使用它可以在flask中更方便的使用WTForms。Flask-WTF将表单数据解析、CSRF保护、文件上传等功能与Flask集成。 激活pipenv环境 看下环境中安装了什么 pipenv install flask-w 阅读全文
posted @ 2019-03-04 22:36 夏晓旭 阅读(7389) 评论(0) 推荐(0)
摘要:表单 在Web程序中,表单时和用户交互最常见的方式之一。用户注册、登录、撰写文章、编辑设置,无一不用到表单。不过,表单的处理不简单。要创建表单,验证用户输入的内容,向用户显示错误提示,还要获取并保存数据。 WTForms可以做这些事情,WTForms是一个使用python编写的表单库,它使得表单的定 阅读全文
posted @ 2019-03-03 22:40 夏晓旭 阅读(413) 评论(0) 推荐(0)
摘要:当程序逐渐变大时,很多时候我们需要在javaScript和CSS代码中使用jinja2提供的变量值,甚至是控制语句。比如,通过传入模板的theme_color变量来为页面设置主题色彩,或是根据用户是否登陆来决定是否执行某个javaScript函数。 需要注意,只有使用render_template( 阅读全文
posted @ 2019-03-03 22:35 夏晓旭 阅读(4400) 评论(0) 推荐(0)
摘要:自定义错误页面 当程序返回错误响应时,会渲染一个默认的错误页面,我们可以注册错误处理函数来处理错误页面 错误处理函数和视图函数很相似,返回值将作为响应的主题,因此我们先要创建错误页面的模板文件。为了和普通模板区分开,我们在模板文件夹templates里建一个errors子文件夹,在其中为最常见的40 阅读全文
posted @ 2019-03-03 22:32 夏晓旭 阅读(1839) 评论(0) 推荐(0)
摘要:消息闪现 flask提供了一个非常有用的flash()函数,它可以用来“闪现”需要提示给用户的消息,比如当用户登录成功后显示“欢迎回来!”。在视图函数调用flash()函数,传入消息内容,flash()函数把消息存储在session中,我们需要在模板中使用全局函数get_flashed_messag 阅读全文
posted @ 2019-03-03 22:27 夏晓旭 阅读(10626) 评论(0) 推荐(0)
摘要:加载静态文件 一个Web项目不仅需要HTML模板,还需要许多静态文件,比如CSS、JavaScript文件、图片和声音声。在flask程序中,默认需要将静态文件存储在与主脚本(包含程序实例的脚本)同级目录的static文件夹中。 为了在HTML文件中引用静态文件,我们需要使用url_for()函数获 阅读全文
posted @ 2019-03-03 22:19 夏晓旭 阅读(4327) 评论(0) 推荐(1)
摘要:模板应用实践 空白控制 在实际输出的HTML文件中,模板中的jinja2语句、表达式和注释会保留移除后的空行。 例如下面的代码: jinja2语句中的代码缩进并不是必须的,添加缩进可以增加可读性。 如果想再渲染时自动去掉空行,可以在定界符内侧添加减号。比如{%-endfor%}会移除该语句前的空白, 阅读全文
posted @ 2019-03-03 22:16 夏晓旭 阅读(1265) 评论(0) 推荐(1)
摘要:模板结构组织 除了使用函数、过滤器等工具控制模板的输出外,jinja2还提供了一些工具来在宏观上组织模板内容。 局部模板 在Web程序中,我们通常会为每一类页面编写一个独立的模板。比如主页模板、用户资料也模板、设置页模板等。这些模板可以直接在视图函数中渲染并作为HTML响应主题。除了这类模板,我们还 阅读全文
posted @ 2019-02-25 22:37 夏晓旭 阅读(1003) 评论(0) 推荐(0)
摘要:flask模板 在动态web程序中,视图函数返回的HTML数据往往需要根据相应的变量(比如查询参数)动态生成。 当HTML代码保存到单独的文件中时,我们没法再使用字符串格式化或拼接字符串的当时在HTML代码中插入变量,这时我们需要使用模板引擎(template engine)。借助模板引擎,我们可以 阅读全文
posted @ 2019-02-24 22:43 夏晓旭 阅读(6637) 评论(0) 推荐(1)
摘要:CSRF(跨站请求伪造)攻击 CSRF(Cross Site Request Forgery,跨站请求伪造)是一种近年来才逐渐被大众了解的网络攻击方式,又被称为One-Click Attack或Session Riding。 攻击原理 CSRF攻击的大致方式如下:某用户登录了A网站,认证信息保存在c 阅读全文
posted @ 2019-02-24 22:38 夏晓旭 阅读(10645) 评论(0) 推荐(1)
摘要:XSS攻击 XSS(Cross-Site Scripting,跨站脚本)攻击历史悠久,是危害范围非常广的攻击方式。 Cross-Site Stripting的缩写本应该是CSS,但是为了避免和Cascading style sheets(层叠样式表)的缩写混淆,所以将Cross(即交叉)使用交叉形状 阅读全文
posted @ 2019-02-23 23:04 夏晓旭 阅读(16918) 评论(1) 推荐(0)