Flask基础之上下文
Posted czdbky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask基础之上下文相关的知识,希望对你有一定的参考价值。
今天接触的基本概念是上下文(Context),它在服务器端活动,获得应用及请求相关信息的对象。下面介绍几类重要上下文及其作用:
一、会话上下文SC(简称,全称Session Context)
提供了为同一个客户端在多次请求之间共享信息的方式。
在web环境,会话(session)是一种客户端与服务器端保持状态的解决方案。在服务器的程序端,会话上下文是用来实现这种解决方案的存储结构。每个不同用户连接家那个得到不同的session,会话由服务器自动产生、用户离开站点释放,同一个用户的多个请求共享一个会话。
会话通常通过Cookie实现,基本原理如下:
1.在服务器收到客户端请求时,检查该客户端是否设置了标识SessionID的Coookie,如果不存在SessionID或SessionID无效,则认为该请求是一个新的会话。
2.当服务器端识别到新的会话时,生成一个新的SeesionID并通过Cookie传递给客户端。
3.客户端在下一次请求时提交在之前获得的SessionID,此时服务器认为该请求与之前生成的SessionID的请求属于同一个会话
flask框架会自动处理上述过程,开发者只需在需要时向会话保存或读取信息即可。可通过flask.session对象操作会话,
只有在请求的处理环境中才能被调用。
eg:
from flask import Flask,session
from datetime import datetime
app = Flask(__name__)
app.secret_key=‘AAA_USE_SESSION‘ #实际开发时,这个值最好配置在文件中
@app.route(‘/define_session‘)
def defineSession():
session[‘keyset‘]= vaule123 #将当前keyset保存在Session中
return session[‘keyset‘] #返回当前会话值
@app.route(‘/use_session‘)
def useSession():
return session.get(‘keyset‘) #获得上次调用defineSession时写入的内容,并返回
if __name__ == ‘__main__‘:
app.run()
除了正常的数据保存于读取,flask.session对象还维护自身的状态,通过如下两个属性实现
1. new,判断本次请求的session是否是新建的
2.mdified,判断本次请求中是否修改过session键值
二、应用全局对象(Application Global)
提供了再一次请求的多个处理函数中共享信息的方式。
在flask中,每个请求可能会触发多个响应函数,如果想要在多个函数中共享数据,则需要用到AG(简称),flask会为每个请求对象自动创建AG,通过flask.g实现,可以保证线程安全,可以在其中保存开发者需要的任何数据,例如,数据连接应用
三、请求上下文(Request Context)
是web服务器管理单次用户请求的环境对象,用于处理客户端向web服务器发送的数据。
主要是在服务端获得从客户端提交的数据。包括URL参数、form表单数据、cookie、html头信息、url等
# -*- coding: utf-8 -*
from flask import Flask,Session
app = Flask(__name__)
from flask import request
@app.route(‘/index‘)
def index(): return "I‘m the index page"
request上下文还有很多其它属性可以获取客户端信息,比如form、headers、json、file等
补充:flask提供几个公告接入点,可写入公共逻辑,
1.before_request(),在每个请求的URL处理函数被调用之前调入本接入点
2.after_request()
3.teardown_request,在每个请求的URL处理函数被调用之后调入本接入点,和第2条区别是发生异常也会调用
以上是关于Flask基础之上下文的主要内容,如果未能解决你的问题,请参考以下文章