[应用]
一个 Flask 应用是一个 Flask 类的实例。
可以在一个被称为应用工厂的函数内部创建 Flask实例。
所有应用相关的配置、注册和其他设置都会在函数内部完成,然后返回这个应用。
__init__.py 有两个作用:一是包含应用工厂;二是 告诉 Python 应用文件夹应当视作为一个包。
__name__ 是当前 Python 模块的名称。
instance_relative_config=True 告诉应用配置文件是相对于 instance folder 的相对路径。
app.config.from_mapping() 设置一个应用的缺省配置
app.config.from_pyfile() 使用 config.py 中的值来重载缺省配置。
可以通过使用 flask 命令来运行应用。

[视图]
视图是一个应用对请求进行响应的函数。
Flask 通过模型把进来的请求 URL 匹配到 对应的处理视图。
视图返回数据,Flask 把数据变成出去的响应。
Flask 也可以反 过来,根据视图的名称和参数生成 URL。
before_app_request() 注册一个在视图函数之前运行的函数,不论其 URL 是什么。

[蓝图]
Blueprint 是一种组织一组相关视图及其他代码的方式。
把视图及其他代码注册到蓝图,然后在工厂函数中把蓝图注册到应用。
使用 app.register_blueprint() 导入并注册蓝图。
url_for()根据视图的名称生成相应的URL 。

[模板]
模板是包含静态数据和动态数据占位符的文件。Flask 使用 Jinja 模板库来渲染模板。
在 Flask 中, Jinja 被配置为 自动转义 HTML 模板中的任何数据。
任何用户输入的可能出现歧意的字符,如 < 和 > ,会被 转义 ,替换为 安全 的值。
任何位于 {{ 和 }} 这间的东西是一个会输出到最终文档的静态式。
{% 和 %} 之间的东西表示流程控制语句,如 if 和 for 。
g 在模板中自动可用。
url_for() 也是自动可用的。
为了更好地管理文件,属于某个蓝图 的模板会被放在与蓝图同名的文件夹内。

[静态文件]
Flask 自动添加一个 static 视图,视图使用相对于 flaskr/static 的相对路径。

[session]
session 是一个dict,它用于储存横跨请求的值。
会话数据被储存到一个向浏览器发送的 cookie 中,在后继请求中,浏览器会返回它。
Flask 会安全对数据进行 签名 以防数据被篡改。

【情境如何工作】
在内部,请求和应用程序情境实质是 _request_ctx_stack 和 _app_ctx_stack 堆栈。
当情境被压入堆栈时,依赖它们的代理可用并指向堆栈顶部情境中的信息。

当请求开始时,将创建并推送 RequestContext ,如果该应用程序的情境尚不是顶级情境,则该请求会首先创建并推送 AppContext。
在推送这些情境时, current_app、 g 、 request和 session代理可用于处理请求的原始线程。

在分派请求并生成和发送响应之后,会弹出请求情境,然后弹出应用情境。
在紧临弹 出之前,会执行teardown_request()注册的函数 和 teardown_appcontext()注册的函数。

1、在每次请求之前, before_request() 函数都会被调用。如果其 中一个函数返回了一个值,则其他函数将被跳过。
返回值被视为响应,并且视图 函数不会被调用。
2、如果 before_request() 函数没有返回响应,则调用匹配路由的 视图函数并返回响应。
3、视图的返回值被转换为实际的响应对象并传递给 after_request() 函数。每个函数都返回一个修改过的或新的响应对象。
4、返回响应后,将弹出情境,该情境调用 teardown_request() 和 teardown_appcontext() 函数。
即使在上面任何一处引发了未处 理的异常,也会调用这些函数。

在请求结束时,会弹出请求情境,并且与其关联的所有数据都将被销毁。
当开发服务器以开发模式运行时( FLASK_ENV 环境变量设置为 'development'),错误和数据将被保留并显示在交互式调试器中。
不要在生产环境中启用 PRESERVE_CONTEXT_ON_EXCEPTION ,因为它会导致 应用在发生异常时泄漏内存。

[请求情境]
当 Flask 应用处理请求时,它会根据从 WSGI 服务器收到的环境创建一个 Request 对象。
处理请求时, Flask 自动 推送 请求情境。
在请求期间运行的视图函数,错误处 理器和其他函数将有权访问 request 代理,该请求代理指向当前请求的请求对象。
请求情境在请求期间跟踪请求级数据。不是将请求对象传递给请求期间运行的每个函数,而是访问request 和 session代理。

[应用情境]
g 表示“全局”的意思,但是指的是数据在 情境 之中是全局的。 g 中的数据在情境结束后丢失,因此它不是在请求之间存储数据的恰当位置。
处理请求时, Flask 自动 推送 应用情境。在请求期间运行的视图函数、错误处 理器和其他函数将有权访问 current_app
当应用情境被弹出时,应用将调用使用 teardown_appcontext() 注册的函数。
如果 signals_available 为真,则发送以下信号: appcontext_pushed 、 appcontext_tearing_down 和 appcontext_popped 。

flask之基础概念的更多相关文章

  1. (数据科学学习手札102)Python+Dash快速web应用开发——基础概念篇

    本文示例代码与数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的新系列教程Python+Dash快 ...

  2. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  3. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  4. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  5. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  6. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  7. JavaBean 基础概念、使用实例及代码分析

    JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...

  8. RabbitMQ基础概念详细介绍

    http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...

  9. linux设备驱动归纳总结(二):模块的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...

随机推荐

  1. linux 挂载 smb

    smbmount //192.168.1.210/homes/dm8168 /opt/fedora/ -o username=psubo,password=psubo_smb

  2. 以太坊钱包Geth使用命令

    一.启动以太坊钱包Geth 打开一个控制台,执行同步区块命令 #同步测试链geth --fast --cache=512 --rpc --rpcapi personal,db,eth,net,web3 ...

  3. 后向传播算法“backpropragation”详解

    为什么要使用backpropagation? 梯度下降不用多说,如果不清楚的可以参考梯度下降算法. 神经网络的参数集合theta,包括超级多组weight和bais. 要使用梯度下降,就需要计算每一个 ...

  4. gitblit搭建git服务器

    如果你的公司使用git作为版本管理工具,那么对gitblit应该也不会陌生.gitblit是一个开源的git服务器java实现,一般情况下gitblit都是由别人已经搭建好你直接使用就行了,除非你就是 ...

  5. Eclipse Validating缓慢的优化

    使用Eclipse的人基本都有这种情况,如图: 各种等待有木有,各种崩溃啊有木有,反正我是觉得挺烦的,但是也不知道是干嘛的,如果取消了,造成程序出问题,就是给自己找麻烦,我知道这个事情肯定是可以关的, ...

  6. eclipse 中英文切换

    第一种方法: 在Eclipse安装目录下找到它的配置文件"eclipse.ini",用UE或者EditPlus等工具打开该配置文件,截图显示如下: 然后在最后一行添加如下相应命令: ...

  7. 使用Shell脚本查找程序对应的进程ID,并杀死进程

    #!/bin/sh NAME='shell.php' echo $NAME ID=`ps -ef | grep "$NAME" | grep -v "$0" | ...

  8. 3.mysql多表

    这篇主要总结mysql的建表规则. 01.多表_建表的原则:     需求:创建一个表可以存储学员信息:学员编号,姓名,性别,年龄,科目     1).原则:         1.保证表中的一列,只记 ...

  9. js获取select标签选中的值[转]

    var obj = document.getElementByIdx_x(”testSelect”); //定位id var index = obj.selectedIndex; // 选中索引 va ...

  10. MySQL数据库的安装以及配置过程

    首先,下载 MySQL 数据库的安装包:mysql-5.7.17.msi.(百度一下自己下吧) 然后点击这里,啊哈哈哈哈哈哈哈. ----------------------------------- ...