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基础之上下文的主要内容,如果未能解决你的问题,请参考以下文章

Flask基础之上下文

flask基础之AppContext应用上下文和RequestContext请求上下文

Flask框架基础3

Flask拾遗笔记之上下文

Flask源码之请求上下文和应用上下文

Flask之模板之宏继承包含