【Flask】Flask学习笔记(一) 应用基本结构
初始化
使用前必须创建一个应用实例
from flask import Flask
app = Flask(__name__)
路由和视图函数
请求流程
客户端(web浏览器)--> web服务器 --> Flask应用实例
路由概念
应用实例需要知道对每个 URL 的请求要运行哪些代码, 所以保存了一个 URL 到 Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由。
定义路由
使用app.route 装饰器
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
视图函数
上面类似于index这种处理入站请求的函数称为视图函数。
响应
视图函数返回值称为响应。响应可以为简单字符串,也可以是复杂表单。
实例:一个完整的应用
hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello World!</h1>
windows运行
E:\study\flask>set FLASK_APP=hello.py
E:\study\flask>flask run
* Serving Flask app "hello.py"
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [27/Mar/2019 15:53:11] "GET / HTTP/1.1" 200 -
浏览器显示

通过编程方式启动
主程序尾部增加如下代码
if __name__=='__main__':
app.run()
动态路由
URL中包含可变部分
dynamic_route.py
from flask import Flask
app = Flask(__name__) @app.route('/')
def index():
return '<h1>Hello World!</h1>' @app.route('/user/<name>')
def user(name):
return '<h1>Hello, {}!</h1>'.format(name) if __name__=='__main__':
app.run()
浏览器显示

调试模式
调试模式中会自动加载两个工具: 重载器 和调试器 。
启用调试模式
执行flask run之前设定FLASK_DEBUG=1
E:\study\flask>set FLASK_APP=hello.py
E:\study\flask>set FLASK_DEBUG=1
E:\study\flask>flask run
* Serving Flask app "hello.py" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Restarting with stat
* Debugger is active!
* Debugger PIN: 627-210-384
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
编程代码中设置
if __name__=='__main__':
app.run(debug=True)
应用&请求上下文
上下文作用:临时把某些对象变为全局可访问。
from flask import request
@app.route('/')
def index():
user_agent = request.headers.get('User-Agent')
return '<p>Your browser is {}</p>'.format(user_agent)
index视图函数中把 request 当作全局变量使用
Flask上下文全局变量

上下文处理流程
激活应用&请求上下文 --> ask 分派请求 --> 请求处理完成再将其删除
激活上下文
>>> from hello import app
>>> from flask import current_app
>>> app_ctx=app.app_context()
>>> app_ctx.push()
>>> current_app.name
'hello'
>>> app_ctx.pop()
PS:
- app.app_context() 获取上下文
- push():激活上下文
- pop():关闭上下文
请求钩子
即通用函数的功能,处理请求之前或之后的执行代码。注册的函数可在请求被分派到视图函数之前或之后调用。请求钩子通过装饰器实现。

请求钩子函数和视图函数之间共享数据一般使用上下文全局变量 g
响应
对视图函数返回的响应添加不同的状态码。
方法:把数字代码作为第二个返回值, 添加到响应文本之后。
@app.route('/')
def index():
return '<h1>Bad Request</h1>', 400
make_response():返回等效的响应对象
重定向
使用redirect() 函数
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, {}</h1>'.format(user.name)
PS:abort() 不会把控制权交还给调用它的函数,而是抛出异常。
【Flask】Flask学习笔记(一) 应用基本结构的更多相关文章
- java之jvm学习笔记十三(jvm基本结构)
java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...
- DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)
一.进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差.想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个比较科学的方法,具体的看下面的例子 还是以猫 ...
- muduo学习笔记(二)Reactor关键结构
目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...
- jQuery 学习笔记:jQuery 代码结构
jQuery 学习笔记:jQuery 代码结构 这是我学习 jQuery 过程中整理的笔记,这一部分主要包括 jQuery 的代码最外层的结构,写出来整理自己的学习成果,有错误欢迎指出. jQuery ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Bash脚本编程学习笔记07:循环结构体
本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...
- Bash脚本编程学习笔记06:条件结构体
简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式. if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现, ...
- Flask框架学习笔记(API接口管理平台 V1.0)
今天博主终于完成了API接口管理平台,最后差的就是数据库的维护, 博主这里介绍下平台的设计原理,首先基于python,利用flask的web框架+bootstrap前端框架完成,先阶段完成了前台展示页 ...
- Web开发Flask框架学习笔记
Python 是一种跨平台的[计算机程序设计语言],是一种面向对象的动态类型语言,Python是纯粹的自由软件,源代码和解释器CPython遵循 GPL(GNU General Public Lice ...
- Python Flask 开发学习笔记
Flask学习 安装pipenv虚拟环境 pip Install pipenv 运行pipenv pipenv --version 进入虚拟容器 pipenv install 安装flask pipe ...
随机推荐
- MarkDownPad2基本语法
一.换行和空格 (1)换行 行尾加两个空格 (2)空格 二.标题 在#后跟个空格再写文字,一个#是一级标题,两个#是二级标题,以此类推,支持六级标题. 示例: # 一级标题 ...
- [转帖][超级少儿不宜]一氧化氮(NO),为什么亚洲人是最硬
阴茎科学:一氧化氮(NO),为什么亚洲人是最硬 尼堪巴图鲁 关注他 2,911 人赞同了该文章 https://zhuanlan.zhihu.com/p/55941740 超级少儿不宜.. ...
- Java静态代码块、构造代码块执行顺序问题
package com.zxl.staticdemo; public class BlockTest { static { System.out.println("BlockTest静态代码 ...
- Netty 客户端断线重连
client 关闭后会执行 finally 代码块,可以在这里可以进行重连操作 public class NettyClient implements Runnable { private final ...
- [LOJ3014][JOI 2019 Final]独特的城市——树的直径+长链剖分
题目链接: [JOI 2019 Final]独特的城市 对于每个点,它的答案最大就是与它距离最远的点的距离. 而如果与它距离为$x$的点有大于等于两个,那么与它距离小于等于$x$的点都不会被计入答案. ...
- 使用Portainer管理Docker
Portainer Portainer安装非常简单,只需不到一分钟.Portainer完全支持Docker 1.10及更高版本. Mac 快速安装运行: 命令行输入: docker pull port ...
- BZOJ 1815: [Shoi2006]color 有色图(Polya定理)
题意 如果一张无向完全图(完全图就是任意两个不同的顶点之间有且仅有一条边相连)的每条边都被染成了一种颜色,我们就称这种图为有色图. 如果两张有色图有相同数量的顶点,而且经过某种顶点编号的重排,能够使得 ...
- 学习STM32F769DK-OTA例程之百度云平台建立MQTT服务器
@2019-04-17 [小记] 百度云平台建立MQTT服务器时需要设置权限组,否则连接失败
- 自动化测试框架【windows版】:JMeter + Ant + Jenkins
前提条件:windows安装了jmeter.ant.jenkins 安装方法参考汇总目录中对应的博文 截图看不清的,可以调大浏览器倍数看 jenkins驱动ant执行,ant驱动jmeter执行 an ...
- Linux-ftp服务搭建
云服务器ESC 部署vsftpd服务 记一次ftp服务搭建的采坑过程,这个坑一直卡了很久时间,都给忘记了.最近由于公司项目需要部署FTP,经过各种采坑,终于把这个坑给填上了.废话不多说,开干 环境说明 ...