前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask 学习笔记

Flask 学习笔记

作者头像
ShenduCC
发布2018-04-27 11:58:19
6620
发布2018-04-27 11:58:19
举报
文章被收录于专栏:算法修养

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.

代码语言:javascript
复制
>>> 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 就是执行请求发生错误。

代码语言:javascript
复制
for example
app.route('/')
def index():
return '<h1>error request<h1>,400'

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

代码语言:javascript
复制
@app.route('/')
def index2():
response=make_response('<h1>This document carries a cookie!</h1>')
response.set_cookie('answer','42')
return response

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

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

代码语言:javascript
复制
from flask import redirect
@app.route('/') 
def index():
return redirect('http://www.example.com')

abort(用于抛出错误)

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档