Flask 是一个Web应用框架,我也就是一边看书,一边写博文做记录

这本书:

首先安装Flask ,和配置环境,参考这边博客:

然后就开始学习Flask 了。

1.Application and Request Context(上下文)
在Flask 中,一般一个view function(视图函数)会处理一个请求
Flask 中提供request context.保证全局只有一个线程的request,而不会同时出现两个request.

Application and Request Context 一共有四种

current_app (Application context)
g (Application context)
request (Request context)
session (Request context)

2.Request Dispatching(请求发送)
当服务器接受一个请求,Flask通过建立一个URL mapping ,为请求找到相应的视图函数。
Flast 利用 app.route 建立这个Map.

>>> from hello 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> route 是Flask中特有的。

3.Request Hooks(请求挂钩)
在接受请求或者处理完请求之后,都要执行一段代码。比如请求发送之前,我们需要连接一下数据库。所以
我们可以写一个连接数据库的通用函数。Flask 中Request hook function 提供了这个功能
有四种hook 函数

before_first_request: 当接受第一个请求之前要执行的代码。
before_request :接受每一个请求之前要执行的代码。
after_request:处理完每一个请求之后要执行的代码,只有请求成功处理之后。
teardown_request:处理完每一个请求之后要执行的代码,请求处理失败之后也可以执行的。

在 request hook function 和view function 之间的数据共享是通过全局的g context来完成的。
例如登录之前,通过before_request请求连接数据库的获取用户的信息 g.username。然后在
view function 中就可以调用g.username

4.Responses(回应)
每个view function 都会返回一个value。可以返回html 页面。
但是http 协议要求我们还需要返回一个状态,比如200 就是成功执行请求,400 就是执行请求发生错误。

for example
app.route('/')
def index():
return '<h1>error request<h1>,400'

view function 可以返回两个,也可以返回三个(value,status,headers)
Flask 也提供了专门一个函数make_response()

@app.route('/')
def index2():
response=make_response('<h1>This document carries a cookie!</h1>')
response.set_cookie('answer','')
return response

除此之外,还有两种response方式:

redirect(重定向) 实际上一个返回三个值的response

from flask import redirect
@app.route('/')
def index():
return redirect('http://www.example.com')

abort(用于抛出错误)

from flask import abort
@app.route('/user/<id>')
def get_user(id):
user = load_user(id)
if not user:
abort(404)
return '<h1>Hello, %s</h1>' % user.name

Flask 学习笔记的更多相关文章

  1. Python Flask学习笔记之模板

    Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...

  2. Python Flask学习笔记之Hello World

    Python Flask学习笔记之Hello World 安装virtualenv,配置Flask开发环境 virtualenv 虚拟环境是Python解释器的一个私有副本,在这个环境中可以安装私有包 ...

  3. Flask 学习笔记(二):RESTful API

    概括 URL:需要操作的对象,也就是资源 HTTP method:我要对该对象做什么(POST 增.DELETE 删.GET 查.PUT 和 PATCH 改) HTTP status code:操作的 ...

  4. 【Flask】Flask学习笔记(一) 应用基本结构

    初始化 使用前必须创建一个应用实例 from flask import Flask app = Flask(__name__) 路由和视图函数 请求流程 客户端(web浏览器)-->  web服 ...

  5. flask学习笔记(1)-虚拟环境安装

    Mac(类Linux): pip install virtualenv mkdir testvirtualenv cd testvirtualenv virtualenv flask-env#创建虚拟 ...

  6. Flask学习笔记(3)--路由

    0x01 参数传递 传递参数的语法是: /<参数名>/,然后在视图函数中,也要定义同名的参数. 参数的数据类型: 1.如果没有指定具体的数据类型,那么默认就是使用string 数据类型. ...

  7. Flask学习笔记(2)--最简单的小应用

    0x01 第一个小程序 PyCharm新建一个flask项目,第一个小程序,我们来看一下 #引入flask类 from flask import Flask #将Flask对象实例化 app = Fl ...

  8. Flask 学习笔记(1)--环境安装

    Flask 官网:http://flask.pocoo.org/ Flask文档:http://docs.jinkan.org/docs/flask/ 0x01 安装方式 安装步骤很简单,就是这个样子 ...

  9. pythonweb框架Flask学习笔记05-简单登陆

    源代码从下链接引用:https://www.cnblogs.com/felixwang2/p/9261493.html 我使用的是python3.6 在运行代码的时候遇到了以下问题 session[' ...

随机推荐

  1. KoaHub.JS基于Node.js开发的mysql的node.js驱动程序代码

    mysql A node.js driver for mysql. It is written in JavaScript, does not require compiling, and is 10 ...

  2. PHP数据访问修改和多条件查询(20161030)

    查询分为关键字查询和准确查询 1.没有提交的时候--查所有 2.两个输入都为空--查所有3.第一个条件有,第二个为空--根据第一个条件查4.第一个没有,第二个有--根据第二个条件查5.两个都有--根据 ...

  3. 【转载】扩展Robot Framework,实现失败用例自动再执行(失败重跑)

    使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加--retry选项,实现test级别的失败 ...

  4. ps人物像发丝的抠图处理

    1-复制图层——使用快速选择工具——添加选区(包含发丝)——调整边缘 2- 提高半径(尽量高)——降低移动边缘——输出到新建图层 这个时候,我们发现人物的很多地方是透明的,不用担心,因为我们这一步先是 ...

  5. Bootstrap 组件之 Navbar

    一.简介 Navbar 指导航条,它在移动设备上显示为折叠状态,在宽屏幕上水平展开.这里 是一个线上例子. 响应式导航条依赖 collapse 插件,定制 Bootstrap 时务必要包含. {设备的 ...

  6. 自适应滤波:维纳滤波器——GSC算法及语音增强

    作者:桂. 时间:2017-03-26  06:06:44 链接:http://www.cnblogs.com/xingshansi/p/6621185.html 声明:欢迎被转载,不过记得注明出处哦 ...

  7. Linux之kill,pkill,killall命令

    kill,pkill,killall这些命令都是用来杀死进程的 查找进程的方法: ps -ef|grep pidof 进程名 ps命令 http://www.cnblogs.com/along1226 ...

  8. JS——函数、事件

    1.函数字符串函数 var s=new string(); var ss="hello world"; var sss=""HELLO, WORLD" ...

  9. 深入探究stm32GPIO口模式(类比51)

    关于STM32GPIO口的8种工作模式,我们先引出一些问题? STM32GPIO口如果既要输入又要输出怎么办? 1.浮空输入模式 上图红色的表示便是浮空输入的过程,外部输入时0读出的就是0,外部输入时 ...

  10. AngularJS1.X学习笔记2-数据绑定

    上一篇从整体上认识了Angular,从现在开始更加深入的学习Angular的特性.本次学习的是数据绑定.应该所有的MVC框架都会用到数据绑定,比如我所知道的ThinkPHP.struts等,只有实现了 ...