初始化

使用前必须创建一个应用实例

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学习笔记(一) 应用基本结构的更多相关文章

  1. java之jvm学习笔记十三(jvm基本结构)

    java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...

  2. DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)

    一.进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差.想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个比较科学的方法,具体的看下面的例子 还是以猫 ...

  3. muduo学习笔记(二)Reactor关键结构

    目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...

  4. jQuery 学习笔记:jQuery 代码结构

    jQuery 学习笔记:jQuery 代码结构 这是我学习 jQuery 过程中整理的笔记,这一部分主要包括 jQuery 的代码最外层的结构,写出来整理自己的学习成果,有错误欢迎指出. jQuery ...

  5. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  6. Bash脚本编程学习笔记07:循环结构体

    本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...

  7. Bash脚本编程学习笔记06:条件结构体

    简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式. if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现, ...

  8. Flask框架学习笔记(API接口管理平台 V1.0)

    今天博主终于完成了API接口管理平台,最后差的就是数据库的维护, 博主这里介绍下平台的设计原理,首先基于python,利用flask的web框架+bootstrap前端框架完成,先阶段完成了前台展示页 ...

  9. Web开发Flask框架学习笔记

    Python 是一种跨平台的[计算机程序设计语言],是一种面向对象的动态类型语言,Python是纯粹的自由软件,源代码和解释器CPython遵循 GPL(GNU General Public Lice ...

  10. Python Flask 开发学习笔记

    Flask学习 安装pipenv虚拟环境 pip Install pipenv 运行pipenv pipenv --version 进入虚拟容器 pipenv install 安装flask pipe ...

随机推荐

  1. ##Django中Application labels aren't unique解决方法##

    pip更新了所有插件,发现了按平常编码遇到些问题,记录下. Django错误 django.core.exceptions.ImproperlyConfigured: Application labe ...

  2. sqlplus命令行登录oracle数据库的N种方法盘点

    欢迎访问我的个人博客IT废柴,本文永久链接移至:sqlplus命令行登录oracle数据库的N种方法盘点 sqlplus有几种登陆方式Oracle数据库, 比如: 1.以操作系统权限认证的oracle ...

  3. 【10】Cookie和Session

    一.cookie和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要"保持状态",因此cookie就是在这样一个场景下 ...

  4. 【dp】导弹拦截

    题目链接 https://www.luogu.org/problemnew/show/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的 ...

  5. django集成celery

    Celery是一个基于分布式消息传递的开源异步任务队列,在django实际应用场景下,往往有一些较为耗时,但并不需要返回值的任务, 例如发送邮件,更新我们自己的统计数据库,这时我们可以将这些任务交由c ...

  6. 阿里云ECS服务器部署Node.js项目全过程详解

    本文详细介绍如何部署NodeJS项目到阿里云ECS上,以及本人在部署过程中所遇到的问题.坑点和解决办法,可以说是全网最全最详细的教程了.同时讲解了如何申请阿里云免费SSL证书,以及一台ECS服务器配置 ...

  7. 【一本通1248:Dungeon Master&&洛谷UVA532 Dungeon Master】

    若不会广搜转向[广搜] [题目描述] 这题是一个三维的迷宫题目,其中用‘.’表示空地,‘#’表示障碍物,‘S’表示起点,‘E’表示终点,求从起点到终点的最小移动次数,解法和二维的类似,只是在行动时除了 ...

  8. Java程序设计第一次作业

    虽说这学期Java比上学期的C语言要简单些许,但是初次面对java程序,还是有点难度的.

  9. docker 删除镜像

    有时候我们不需要某个镜像,需要对它进行删除.1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有cont ...

  10. Spring项目使用Junit4测试配置

    我们经常要写junit测试,在不启动整个web项目的情况下,测试自己的service实现或者是dao实现,我们来充分利用下junit4的强大功能. 1.junit4的测试类 import java.u ...