1、简介web
Flask是一个基于Python的web框架,它的设计目的是提供Web开发所需的最小功能子集。Flask没有绑定诸如数据库查询或者表单处理等功能库,以及它们所组成的整个生态系统。它倾向于对这些功能的实现方式不作任何限定数据库
安装 Flask 最便捷的方式是使用虚拟环境。虚拟环境是 Python 解释器的一个私有副本,在flask
这个环境中你能够安装私有包,并且不会影响系统中安装的全局 Python 解释器浏览器
下面是在pycharm中建立Flask项目服务器
全部 Flask 程序都必须建立一个程序实例。Web 服务器使用一种名为 Web 服务器网关接口(Web Server Gateway Interface,WSGI)的协议,把接收自客户端的全部请求都转交给这cookie
个对象处理。程序实例是 Flask 类的对象session
2、URLapp
Web 浏览器把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask程序实例。程序实例须要知道对每一个 URL 请求运行哪些代码,因此保存了一个 URL 到Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由,在Flask程序中,使用程序实例提供的 app.route 修饰器,把修饰的函数注册为路由框架
#尖括号中的内容就是动态部分,任何能匹配静态部分的 URL 都会映射到这个路由上函数
@app.route('/user/<name>') def user(name): return '<h1>Hello, %s!</h1>' % name
3、视图函数
Hello_word() 这样的函数称为视图函数(view function)。视图函数返回的响应能够是包含HTML 的简单字符串,也能够是复杂的表单
#coding=utf-8 from flask import Flask #将构造函数的 name 参数传给 Flask 程序,Flask 用这个参数决定程序的根目录 app = Flask(__name__) #使用程序实例提供的 app.route 修饰器,把修饰的函数注册为路由 @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
执行效果
4、请求-响应
Flask 从客户端收到请求时,要让视图函数能访问一些对象,这样才能处理请求。请求对象就是一个很好的例子,它封装了客户端发送的 HTTP 请求。要想让视图函数可以访问请求对象,一个显而易见的方式是将其做为参数传入视图函数,不过这会致使程序中的每一个视图函数都增长一个参数。除了访问请求对象,若是视图函数在处理请求时还要访问其余对象,状况会变得更糟。为了不大量无关紧要的参数把视图函数弄得一团糟, Falsk 使用上下文让特定的变量在一个线程中全局可访问,与此同时却不会干扰其余线程
变量名 |
上下文 |
说明 |
current_app |
程序上下文 |
当前激活程序的程序实例 |
g |
程序上下文 |
处理请求时用做临时存储的对象。每次请求都会重设这个变量 |
request |
请求上下文 |
请求对象,封装了客户端发出的 HTTP 请求中的内容 |
session |
请求上下文 |
用户会话,用于存储请求之间须要“记住”的值的词典 |
Flask 在分发请求以前激活(或推送)程序和请求上下文,请求处理完成后再将其删除。程
序上下文被推送后,就能够在线程中使用 current_app 和 g 变量。相似地,请求上下文被
推送后,就可使用 request 和 session 变量
Flask 提供了注册通用函数的功能,注册的函数可在请求被分发到视图函数以前或以后
调用。
请求钩子使用修饰器实现。Flask 支持如下 4 种钩子
before_first_request • :注册一个函数,在处理第一个请求以前运行。
before_request • :注册一个函数,在每次请求以前运行。
after_request • :注册一个函数,若是没有未处理的异常抛出,在每次请求以后运行。
teardown_request • :注册一个函数,即便有未处理的异常抛出,也在每次请求以后运行
钩子函数和视图函数之间共享数据通常使用上下文全局变量 g 。例如, before_
request 处理程序能够从数据库中加载已登陆用户,并将其保存到 g.user
Flask 调用视图函数后,会将其返回值做为响应的内容, Flask 视图函数还能够返回 Response 对象, 下例建立了一个响应对象,而后设置了 cookie:
from flask import make_response @app.route('/') def index(): response = make_response('<h1>This document carries a cookie!</h1>') response.set_cookie('answer', '42') return response
重定向的特殊响应类型, 没有页面文档,只告诉浏览器一个新地址用以加载新页面。重定向常常在 Web 表单中使用, 重定向响应可使用返回值生成,也可在 Response 对象中设定。因为使用频繁,Flask 提供了 redirect() 辅助函数
from flask import redirect @app.route('/') def index(): return redirect('http://www.example.com')
abort 函数生成,用于处理错误
若是 URL 中动态参数 id 对应的用户不存在,就返回状态码 404:
from flask import abort @app.route('/user/<id>') def get_user(id): user = load_user(id) if not user: abort(404) return '<h1>Hello, %s</h1>' % user.name
学习过程依据《Flask+Web开发:基于Python的Web应用开发实战》
电子版pdf(含目录)地址
连接:https://pan.baidu.com/s/1f43AUHydzp5EOEv6zjYv2A 密码:xi71