Flask web开发笔记(一)

1.创建Python的虚拟环境
cd  /home/ubuntu    # 定位到需要放置虚拟环境的目录
virtualenv venv     # venv为虚拟环境目录名
source venv/bin/activate    # 激活虚拟环境

当虚拟环境中的工作完成后,如果想回到全局Python 解释器中,可以在命令行提示符下输入deactivate。

2.程序初始化

所有Flask 程序都必须创建一个程序实例。Web 服务器网关接口(WSGI)把接收自客户端的所有请求都转交给这
个对象处理。程序实例是Flask 类的对象,经常使用下述代码创建:

from flask import Flask
app = Flask(__name__)

Flask 类的构造函数只有一个必须指定的参数,即程序主模块或包的名字。在大多数程序中,Python 的 __name__ 变量就是所需的值。
将构造函数的name 参数传给Flask 程序,Flask 用这个参数决定程序的根目录,以便稍后能够找到相对于程序根目录的资源文件位置。

3.路由和视图函数

客户端把请求发送给Web 服务器,Web 服务器再把请求发送给Flask程序实例。程序实例需要知道对每个URL 请求运行哪些代码,所以保存了一个URL 到Python 函数的映射关系。处理URL 和函数之间关系的程序称为路由。
在Flask 程序中定义路由的最简便方式,是使用程序实例提供的app.route 修饰器,把修饰的函数注册为路由

@app.route('/')
def index(): # 把index() 函数注册为程序根地址的处理程序
    return '<h1>Hello World!</h1>'

像index() 这样的函数称为视图函数(view function)。视图函数返回的响应可以是包含HTML 的简单字符串,也可以是复杂的表单
视图函数的作用很明确,即生成请求的响应

4.启动服务器

程序实例用run 方法启动Flask 集成的开发Web 服务器:

if __name__ == '__main__':
    app.run(debug=True)

__name__==’__main__’ 是Python 的惯常用法,在这里确保直接执行这个脚本时才启动开发Web 服务器。如果这个脚本由其他脚本引入,程序假定父级脚本会启动不同的服务器,因此不会执行app.run()。

服务器启动后,会进入轮询,等待并处理请求。轮询会一直运行,直到程序停止,比如按Ctrl-C 键。

Flask 提供的Web 服务器不适合在生产环境中使用


5.Flask上下文全局变量
变量名 上下文 说明
current_app 程序上下文 当前激活程序的程序实例
g 程序上下文 处理请求时用作临时存储的对象。每次请求都会重设这个变量
request 请求上下文 请求对象,封装了客户端发出的HTTP 请求中的内容
session 请求上下文 用户会话,用于存储请求之间需要“记住”的值的词典

Flask 在分发请求之前激活(或推送)程序和请求上下文,请求处理完成后再将其删除。
程序上下文被推送后,就可以在线程中使用current_app 和g 变量。类似地,请求上下文被推送后,就可以使用request 和session 变量。
如果使用这些变量时我们没有激活程序上下文或请求上下文,就会导致错误。

6.请求钩子

为了避免在每个视图函数中都使用重复的代码,Flask 提供了注册通用函数的功能,注册的函数可在请求被分发到视图函数之前或之后调用。例如,在请求开始时,我们可能需要创建数据库连接或者认证发起请求的用户。
请求钩子使用修饰器实现。Flask 支持以下4 种钩子。
• before_first_request:注册一个函数,在处理第一个请求之前运行。
• before_request:注册一个函数,在每次请求之前运行。
• after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
• teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。
在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量g。例如,before_request 处理程序可以从数据库中加载已登录用户,并将其保存到g.user 中。随后调用视图函数时,视图函数再使用g.user 获取用户。

7.请求钩子

猜你喜欢

转载自blog.csdn.net/qq_28719743/article/details/79275372
今日推荐