flask框架的工作方式和一些概念

来源:互联网 发布:java多线程的两种方法 编辑:程序博客网 时间:2024/06/01 10:26

个人觉得学习一个新知识,基础知识很重要,也要抛开语言去理解原理。

  • 整体的知识体系包括:

1**.http协议前端基础**HTML、css、js等,能看懂会修改
2**.Unix/Linux操作系统**。包括基础的使用,毕竟是平台
3**.网络编程。**TCP/IP协议
4**.脚本语言**。语言基础,进阶,常用库,不同的框架,深入学习
5**.数据库**。基础知识,优化

框架,需要理解框架实现一个功能特性的原理。最好是先不用这个框架,然后再对比一下为何要用。和IDE很相似,现在也明白了以前JAVA老师刚开始没用IDE,用命令行自己编译运行几个文件,手动建包啊之类的为的是要明白过程,底层原理。
使用框架也是一样的,通过实践出来的对比,就会明白,它到底做了哪些事情。消除重复性;灵活性;如果不写几十个权限检查语句,就很难理解AOP到底有什么好处。
源码的阅读,会更好的理解,灵活运用,这也是以后要做的事情。

  • flask框架的工作方式和一些概念,web知识记录。

有时候起初看有些概览、细节时是懂非的,当实际敲代码时就会发现问题,或者出现理解偏差或者直接懵逼了,然后再看下会有系统的理解。

CGI (Common Gateway Interface)通用网管接口 :利用程序的标准输入输出流,完成 HTTP 通信。HTTP 是文本协议,每次请求的文本以标准输入流的形式进入服务器端 CGI 程序,创建进程;然后进程的标准输出流作为响应 。
WSGI (Web Server Gateway Interface) 是 Python 专用的协议,服务器和客服端的接口规范。
也是输入&输出的方式传输文本流,但不是创建进程,而是对一个 WSGI 程序(callable 的对象,可以是函数也可以是实现了 call 的对象),
将 request 作为参数传入(不再是纯文本,而是经过包装),同样将经过包装的 response 作为响应返回。

  • 显式的应用对象:

每个 Flask 应用必须创建一个该类的实例,并且把模块的名称传递给该实例。
显式对象可以保证实例的唯一性。可以继承基类( Flask ), 以便于修改特定的功能。这个最小应用的应用对象被删除时,将会 释放其占用的所有资源。

  • 路由系统:

Flask 使用 Werkzeug 路由系统,该系统是自动根据复杂度来为路由排序的。Werkzeug 路由系统必须确保 URL 是唯一的,并且会把模糊路由重定向到 标准的 URL 。
唯一模板引擎:
模板引擎与编程语言类似,把变量丢给引擎,然后得到字符串形式的模板。

flask请求-响应循环

请求->处理请求->响应
Flask 从客户端收到请求->请求调度找到处理该请求的视图函数,Flask 会在程序的URL 映射中查找请求的URL对应到视图函数,视图函数利用请求对象访问一些对象处理请求->Flask 调用视图函数后,会将其返回值作为响应的内容。

程序和请求上下文

请求对象:封装了客户端发送的HTTP 请求。然后把请求对象作为参数传递给视图函数,这样Flask 就能够从客户端收到请求。
上下文:临时把某些对象变为全局可访问。Falsk 使用上下文让特定的变量在一个线程中全局可访问,与此同时却不会干扰其他线程。使得视图函数变得简单。

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

Flask 在分发请求之前激活(或推送)程序和请求上下文,请求处理完成后再将其删除。程序/请求上下文被推送后,就可使用上述变量。

请求调度

程序收到客户端发来的请求时,要找到处理该请求的视图函数。Flask使用app.route 修饰器或者非修饰器形式的app.add_url_rule() 生成映射查找请求的URL。
URL 映射是URL 和视图函数之间的对应关系。
URL 映射中的HEAD、Options、GET 是请求方法,由路由进行处理。Flask 为每个路由都指定了请求方法,这样不同的请求方法发送到相同的URL 上时,会使用不同的视图函数进行处理。

请求钩子

有时在处理请求之前或之后执行代码会很有用。例如,在请求开始时,我们可能需要创建数据库连接或者认证发起请求的用户。为了避免在每个视图函数中都使用重复的代码,Flask 提供了注册通用函数的功能,注册的函数可在请求被分发到视图函数之前或之后调用。
4 种钩子使用修饰器实现:

  • before_first_request:注册一个函数,在处理第一个请求之前运行。
  • before_request:注册一个函数,在每次请求之前运行。
  • after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
  • teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。

在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量g。例如,before_request 处理程序可以从数据库中加载已登录用户,并将其保存到g.user 中。随后调用视图函数时,视图函数再使用g.user 获取用户。

响应

Flask 调用视图函数后,会将其返回值作为响应的内容。大多数情况下,响应就是一个简单的字符串,作为HTML 页面回送客户端。
重定向:这种响应没有页面文档,只告诉浏览器一个新地址用以加载新页面。
重定向经常在Web 表单中使用。
重定向经常使用302 状态码表示,指向的地址由Location 首部提供。重定向响应可以使用3 个值形式的返回值生成,也可在Response 对象中设定。不过,由于使用频繁,Flask 提供了redirect() 辅助函数,用于生成这种响应。
abort:特殊的响应用来处理错误。abort 不会把控制权交还给调用它的函数,而是抛出异常把控制权交给Web 服务器。

1 0