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

最新文章

  1. ASP.NET跨平台最佳实践
  2. android初练二
  3. xml 配置文件规范 校验
  4. sql查询上一条记录和下一条记录
  5. Linux 网络编程详解五(TCP/IP协议粘包解决方案二)
  6. rhel7修改网卡命名规则
  7. python的复制,深拷贝和浅拷贝的区别
  8. 不绑架输入--document.getElementById(&quot;linkage_&quot;+id_type+&quot;_echo&quot;).value=&quot;&quot;;--联动
  9. yjfk 意见反馈
  10. android128 zhihuibeijing 科大讯飞 语音识别
  11. 将批量下载的博客导入到手机后,通过豆约翰博客阅读器APP(Android手机)进行浏览,白字黑底,保护眼睛,图文并茂。
  12. 【ASP.NET Web API教程】6 格式化与模型绑定
  13. 【游戏开发】Excel表格批量转换成CSV的小工具
  14. OpenCV——颜色运算
  15. 解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法
  16. ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目
  17. JSP中EL很常用,怎样使用大于号、小于号、等于号等
  18. 阅读阿里文档总结————Mysql数据库篇
  19. django 模型操作
  20. [双系统linux] ----双系统切换导致系统时间错误

热门文章

  1. Cordova 3.0 初步使用
  2. php中关于时间的用法
  3. strace命令的使用
  4. CodeForeces 25E (kmp)
  5. ubuntu16.04下用笔记本摄像头和ROS编译运行ORB_SLAM2的单目AR例程
  6. Oracle 的闪回技术 --flashback
  7. Redis 缓存穿透,缓存击穿,缓存雪崩的解决方案分析
  8. 利用GridView实现单选效果
  9. Scrapy框架(3)
  10. Notepad++插件安装和使用和打开大文件