NOTE

1.hello.py 通过修饰器的route方法添加动态路由:

#!/usr/bin/env python

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
return '<h1>HelloWorld!</h1>' @app.route('/user/<name>')
def user(name):
return '<h1>Hello %s!</h1>' % name if __name__ == '__main__':
app.run(debug=True)
127.0.0.1 - - [16/Feb/2017 14:18:07] "GET /user/wasdns HTTP/1.1" 200 -

2.程序和请求上下文:

请求上下文的作用:临时将某一进程的视图函数需要访问的请求对象变为全局可访问,同时不会干扰其他的进程。

eg.导入request请求上下文,使视图函数能够访问请求的游览器对象。

#!/usr/bin/env python

from flask import Flask
from flask import request app = Flask(__name__) @app.route('/')
def index():
user_agent = request.headers.get('User-Agent')
return '<p>Your browser is %s</p>' % user_agent if __name__ == '__main__':
app.run(debug=True)
127.0.0.1 - - [16/Feb/2017 14:31:22] "GET / HTTP/1.1" 200 -

3.Flask上下文全局变量:

current_app 程序上下文 => 当前激活程序的程序实例
g 程序上下文 => 处理请求时临时存储的对象,每次请求都会重设这个变量
request 请求上下文 => 请求对象,封装client发出的http request的内容
session 请求上下文 => 用户会话,存储请求之间需要存储的值的字典

注意,需要在激活程序和请求上下文之后才能访问上下文。

>>> from hello import app
>>> from flask import current_app
>>> current_app.name
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/wasdns/Desktop/flasky/venv/lib/python2.7/site-packages/werkzeug/local.py", line 343, in __getattr__
return getattr(self._get_current_object(), name)
File "/Users/wasdns/Desktop/flasky/venv/lib/python2.7/site-packages/werkzeug/local.py", line 302, in _get_current_object
return self.__local()
File "/Users/wasdns/Desktop/flasky/venv/lib/python2.7/site-packages/flask/globals.py", line 51, in _find_app
raise RuntimeError(_app_ctx_err_msg)
RuntimeError: Working outside of application context. This typically means that you attempted to use functionality that needed
to interface with the current application object in a way. To solve
this set up an application context with app.app_context(). See the
documentation for more information.
>>> app_ctx = app.app_context() # 激活
>>> app_ctx.push()
>>> current_app.name
'hello'
>>> app_ctx.pop()

4.请求调度:URL映射(map)

Flask使用app.route修饰器和app.add_url_rule()生成映射。

eg.查看Flask程序中的URL映射:

>>> from hello1 import app
>>> app.url_map
Map([<Rule '/' (HEAD, OPTIONS, GET) -> index>,
<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>,
<Rule '/user/<name>' (HEAD, OPTIONS, GET) -> user>])

其中/static/<filename>是Flask添加的特殊路由,用于访问静态文件。

另外,HEAD, OPTIONS, GET是 请求方法,由路由进行处理,Flask为每一个路由都指定了请求方法,这样当不同的请求发送到Flask时,依据其请求方法对应到不同的视图函数。

5.请求钩子:避免在不同的视图函数中使用大量重复的代码(有点像代码重用)。可以在视图函数启动之前或者之后使用。

请求钩子使用修饰器实现。Flask支持以下四种钩子:

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

6.响应:response

视图函数的返回值一般作为响应的内容。

HTTP协议除了需要响应的字符串还需要 状态码。常见的状态码有 200 (请求有效)、404(not found)等。

eg.abort函数生成exception响应,交给web服务器处理。如果对应的动态参数id对应的用户不存在,返回404码。

#!/usr/bin/env python

from flask import Flask

app = Flask(__name__)

@app.route('/user/<id>')
def index(name):
user = load_user(id)
if not user:
abort(404)
return '<h1>Hello, %s</h1>' % user.name if __name__ == '__main__':
app.run(debug=True)

2017/2/16

Flask 3 程序的基本结构2的更多相关文章

  1. Python——Flask框架——程序的基本结构

    一.安装 pip install flask 二.初始化 from flask import Flask app = Flash(__name__) 三.路由:处理URL和函数之间的关系的程序称为路由 ...

  2. Flask 2 程序的基本结构1

    NOTE 1.初始化:所有的Flask程序都必须创建一个程序实例. app = Flask(__name__) # 向Flask的构造函数传入参数__name__ 2.路由和视图函数(VF): Cli ...

  3. Celery 与 Flask 大型程序结构的结合

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...

  4. 采用flask+uwsgi+nginx架构将flask应用程序部署在腾讯云

    最近一星期加班为学校做了一个教师发展中心平台,在此总结一下部署经验 环境:Centos7.0  python2.7.5 1.安装nginx 命令行输入指令:sudo yum install nginx ...

  5. Android程序的目录结构

    本篇文章我们将介绍Android应用程序的目录结构.本目录下有如图的目录结构: 下面我们来一 一介绍: 1.     Src:该目录中存放的是该项目的源代码 2.     Gen:该目录下的文件全部都 ...

  6. 一次请求中,经过 nginx+uWSGI+flask应用程序搭建服务的执行过程

    Flask框架有自带的http server,但是缺点非常明显,并发能力,及时响应非常差,只适合开发时自测使用. 在我接触过的项目中,生产环境使用nginx+uWSGI+flask应用程序进行部署服务 ...

  7. The way to Go(6): Go程序的基本结构和要素

    Reference: Github: Go Github: The way to Go Go程序的基本结构和要素 helloworld.go: package main import "fm ...

  8. Windows c++程序的基本结构

    Windows c++程序的基本结构 1.一个完整的Windows应用程序通常由五种类型的文件组成 C语言源程序文件 头文件 模块定义文件 资源描述文件 项目文件 2.Windows应用程序构成基本框 ...

  9. 基于Python的Web应用开发实战——2 程序的基本结构

    2.1 初始化 所有Flaks程序都必须创建一个程序实例. Web服务器使用一种名为Web服务器网关接口(Web Server Gateway Interface,WSGI)的协议,把接收自客户端的所 ...

随机推荐

  1. 【BZOJ3362-3365】USACO水题四连A

    [BZOJ3362][Usaco2004 Feb]Navigation Nightmare 导航噩梦 Description     农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤ ...

  2. Windows Phone 几种页面间传递数据的方式

    首先,我们要引用:using Microsoft.Phone.Shell; 第一种: // 导航到新页面 NavigationService.Navigate(new Uri("/Detai ...

  3. android麦克风自录自放demo

    extends:http://blog.csdn.net/trbbadboy/article/details/7865530 是一个直接播放麦克风采集到的声音线程类: class RecordThre ...

  4. jpa关联映射(一)

    开发中常用到数据表的关联(其实很难遇到..),spring-data-jpa(其实是hibernate)提供了一整套十分方便的注解来供我们使用表关联功能. OneToOne OneToMany Man ...

  5. Python 自学积累(一)

    1. 当"print os.path.dirname(__file__)"所在脚本是以完整路径被运行的, 那么将输出该脚本所在的完整路径,比如: python d:/pythonS ...

  6. Linux系统下 Supervisor 安装搭建

    在 web 应用部署到线上后,需要保证应用一直处于运行状态,在遇到程序异常.报错等情况,导致 web 应用终止时,需要保证程序可以立刻重启,继续提供服务. 所以,就需要一个工具,时刻监控 web 应用 ...

  7. vuls漏洞扫描工具

    Vuls 是一款适用于 Linux/FreeBSD 的漏洞扫描程序,无代理,采用 Go 语言编写,对于系统管理员来说,每天必须执行安全漏洞分析和软件更新都是一个负担. 为避免生产环境宕机,系统管理员通 ...

  8. yii2 的 Url::to() 和 Url::toRoute()

    关于Url类的操作在这个页面http://www.yiichina.com/doc/guide/2.0/helper-url: Url::to() 和 toRoute() 非常类似.这两个方法的唯一区 ...

  9. Oracle下Update语句

    Update更新 格式: update table _name(表名) set col_name(列名) =expr(表达式) where  conti(条件) 案例1: update 语法可以用新值 ...

  10. 磁盘 I/O 性能监控的指标

    指标 1:每秒 I/O 数(IOPS 或 tps) 对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和.当传输小块不连续数据时,该 ...