VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Python超级明星WEB框架Flask

Flask简介

Flask是一个相对于Django而言轻量级的Web框架。

和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模板引擎Jinja:

策略 :werkzeug和Jinja这两个库和Flask一样,都是pocoo团队开发的。这 或许体现了pocoo与Django竞争时关于生态的一种策略,这种策略的自然 延伸是Flask框架中没有包含数据库方面的构件,无论ORM还是其他。

关注点 :Flask是一个WSGI应用框架,这意味着我们进行Flask开发时,不需要 关注网络方面的操作,Flask应用的入口是封装过的网络请求包,出口是 网络响应,我们仅需要关注这个阶段内的处理逻辑。

WSGI服务器 :Flask虽然内置了简单的WSGI服务器,但其性能仅仅适用于开发期的调试。 Flask官网推荐了多种WSGI服务器,实现方式从多进程到多线程到协程, 这方面的选择我们在本课程中将不涉及。

REST适应性 :虽然Flask和Django一样,最初的出发点都是服务端的动态网页应用。但 Flask的设计使之也相当适用于面向资源的REST架构,在越来越移动化 并且单页应用越来越重要的WEB开发领域,这是Flask相对于Django相当 大的优势。

Hello Flask

编写一个基于Flask的hello world相当容易:

1、导入Flask类

1
from flask import Flask

Flask类是Flask框架的核心类,它实现了WSGI应用规范。

2、创建Flask实例

1
app = Flask(__name__)

Flask构造函数的第一个参数指定一个引入名/importname。Flask框架 使用这个名字进行静态资源、模板、错误信息的定位。除非你清楚的理解它的 作用,通常情况下,我们总应该使用特殊变量_name。

Flask实例是可调用的(具有call方法),这个实例可以直接对接 WSGI服务器。

3、注册路由

1
2
3
@route('/')
def index():
    return 'Hello,Flask!'

注册路由就是建立URL规则和处理函数之间的关联。Flask框架依赖于路由 完成HTTP请求的分发。

路由中的函数被称为视图函数,其返回值将作为HTTP响应的正文内容。

4、对接并启动WSGI服务器

Flask封装了一个简单的开发用WSGI服务器,我们可以通过调用run() 启动服务器运行:

1
app.run(host='0.0.0.0',port=80)

概述

路由是MVC架构的Web框架中相当重要的一个概念,也是本节课程的重点。

顾名思意,路由就是在迷茫中找出一条路的意思。在Flask框架中,路由就表示为用户请求的URL找出其对应的处理函数之意。

在本节课程,我们将主要从以下几个方面讲解Flask框架中的路由:

如何为应用注册路由? 如何为路由指定其支持的HTTP方法? 如何匹配动态URL? 如何对URL中的变量类型进行过滤? 如何理解访问点/endpoint? 如何为应用设定静态路由? 如何避免硬编码指向其他视图的URL?

注册路由

在Flask应用中,路由是指用户请求的URL与视图函数之间的映射。Flask框架 根据HTTP请求的URL在路由表中匹配预定义的URL规则,找到对应的视图函数, 并将视图函数的执行结果返回WSGI服务器:

汇智网 flask route

可见路由表在Flask应用中处于相当核心的位置。路由表的内容是由应用开发者填充。

route装饰器 :可以使用Flask应用实例的route装饰器将一个URL规则绑定到 一个视图函数上。

例如,下面的示例将URL规则/test绑定到视图函数test()上:

1
2
3
@app.route('/test')
def test():
    return 'this is response'

如果这个应用部署在主机ezhost.com的根目录下,那么当用户访问:

http://pythontab.com/teset

Flask框架就会调用我们的test()函数,其返回结果就传递给WSGI服务器发送给访问者。

add_url_rule() :另一种等价的写法是使用Flask应用实例的add_url_route()方法。 下面的示例注册了一个与前例相同的路由:

1
2
3
def test():
    return 'this is response'
app.add_url_route('/test',view_func=test)

其实,route装饰器内部也是通过调用add_url_route()方法实现的路由注册。 但是显然,使用装饰器使代码看起来更优雅一些。

为路由指定HTTP方法

默认情况下,Flask路由仅支持HTTP的GET请求。可以使用methods关键字参数,在注册 路由时显式地声明视图方法支持的HTTP方法。

例如,下面的示例将URL规则/auth绑定到视图函数v_auth(),这个路由仅支持POST方法:

1
2
@app.route('/auth',methods=['POST'])
def v_auth():pass

指定多种HTTP方法支持

关键字参数methods的类型为list,因此可以同时指定多种HTTP方法。

下面的示例中,使URL规则/user同时支持POST方法和GET方法:


相关教程