首先引入Flask的官方文档定义:Flask是Python中一个微型的Web开发框架。对于学习Flask框架的你来讲必须了解以下几个特点。
什么是 “微”?
默认情况下,Flask 并不包含数据库抽象层,表单验证或者任何其它现有的库( Django )能够处理的。相反,Flask 支持扩展,这些扩展能够添加功能到你的应用,像是 Flask 本身实现的一样。众多的扩展提供了数据库集成,表单验证,上传处理,多种开放的认证技术等功能。Flask 可能是“微”型的,但是已经能够在各种各样的需求中生产使用。
Flask 中的本地线程
Flask 其中的一条设计原则就是简单的任务保持简单;任务的实现不需要花费太多的代码也不会限制到你。 因此,Flask 的一些设计决定可能会让一些人感到很惊讶或者非正统。例如,Flask 内部使用了本地线程对象,这样在一个请求中不必在函数之间传递对象以保证线程安全。 这种方式是十分方便,但是为依赖注入或者尝试重用与请求挂钩的值的代码,需要一个有效的请求上下文。 Flask 项目对本地线程很公开的,并不会去隐藏它们,在使用到它们的代码和文档里面都会指出。
小心翼翼地进行 Web 开发
在构建 Web 应用程序时,始终考虑到安全性。
Flask 能够让你免受现代 Web 应用常见的一个安全问题的困扰:跨站脚本攻击(XSS)。 如果你不是刻意地把不安全的 HTML 标记成安全的,Flask 以及底层的 Jinja2 模版引擎会守护着你。 但目前还存在着更多的方法来引起安全问题。
开发者必须在为需求编写代码时留心安全隐患,在这点上,Flask 与其它框架没有区别。
Flask框架介绍
Flask是一个Python的小型Web程序框架,它基于Wekzeug和Jinja 2两个库,有很好的可扩展性。选择学习Flask就是基于他简洁和可扩展的特性。
Web应用的本质是,客户端向服务器发送请求,服务器读取请求内容,返回给客户端相应的数据。如果是静态网站,譬如Hexo博客,客户端输入地址,服务器直接返回静态的HTML页面即可,服务器程序并没有其他任务。但对于动态网站,服务器程序会根据请求的不同,对HTML页面进行相应的加工,返回不同内容的页面。
对应这种特质,一个Web程序,就是响应不同HTTP请求的函数。使用Web框架后,我们在编写Web应用,就是编写对应URL处理函数。
在Flask中URL与处理函数的对应,用@app.route()
装饰器实现。route同时能识别不同的HTTP请求类型。
Flask返回页面,可以用render_template()
来渲染Jinja模板。
同时HTTP请求中也可能包含客户端上传的数据,用request
即可获得。同样利用request
还可以获得Cookie数据。
通过redirect()
我们可以重定向用户的请求,以达到权限控制的目的。同时用@app.errorhandler()
来返回个性化的错误提醒页面。
利用make_response()
可以设置响应的内容,状态码,头部信息等。
利用Session
可以设置干安全的Cookie。
在网站的交互中,可以利用flash()
发出反馈实时信息,模板中可以利用get_flashed_messages()
来获得反馈信息。
服务器程序可以使用app.logger
来记录日志内容。