源码流程 创建对象 from flask import Flask """ 1 实例化对象 app """ app = Flask(__name__) """ 2 设置路由 将路由关系放在 app.url_map = {} 中 """ @app.route("/index") def index(): return "index" if —__na…
Session: Flask 默认将 session 以加密的形式放到了浏览器的 cookie 中 Flask 的 session 就是一个字典,字典有什么方法 session 就有什么方法 flask session 原理:当请求刚进来时,flask会读取cookie中 session(配置文件中能改这个名称) 对应的值,将这个值解密并反序列化成为一个字典放入内存, 以便视图函数使用: 在视图函数中使用时,按照字典的方法使用: 当请求结束时,flask会读取内存中字典的值,进行序列化+加密,然…
2019-1-4 18:13:57 越努力,越幸运! 还有121天,flask讲完,还有4天,总时长130天 还有13天就讲完了 一月争取看完!!! 永远不要高估自己! 今天学了request和session的上下文管理 其实就是如图所示 流程图 flask只是把请求相关东西放在某个神奇的地方,当你需要的时候就去那边拿去 然后用上下文管理去拿 贴上源码 面向对象中特殊的方法 class Foo(object): def __init__(self): # self.storage = {} ob…
session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:'xxxxxx'}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证: 注意 :Flask中的session是存在浏览器中 默认key是session(加密的cookie), 也可以像Django一样基于上述的方式实现保存在数据库 1 flask中 session的基本概念 flask 有一个 session 对象.它允许你在不同请求间存储特定用户的信息.它是在 Cookie…
1.关于session flask是带有session的,它加密后存储在用户浏览器的cookie中,可以通过app.seesion_interface源码查看 from flask import Flask,session app = Flask(__name__) app.secret_key = 'aptx4869' # 必须要指定这个参数 @app.route('/login') def login(): #... # 设置session session['user_info'] = 'n…
一.一些python的知识 1.偏函数 def add(x, y, z): print(x + y + z) # 原本的写法:x,y,z可以传任意数字 add(1,2,3) # 如果我要实现一个功能,这三个数中,其中一个数必须是3 # 我们就可以使用偏函数来帮着我们传参 from functools import partial # partial:给add这个函数固定传一个数字 3 new_add = partial(add, 3) # 因此新的函数只需要传2个参数 new_add(1,1)…
Flask session,request,current_app的传递 请求上下文的作用 -- 封装请求相关得数据(request,session) 请求上下文 request session request local类 {线程,协程的唯一ID:{stack:[RequestContext(request,session)]}} 应用上下文 app local类 {线程,协程的唯一ID:{stack:[AppContext(app,g)]}} # app 保存着 应用相关的值 # g 每次请…
为什么用threading.local? 我们都知道线程是由进程创建出来的,CPU实际执行的也是线程,那么线程其实是没有自己独有的内存空间的,所有的线程共享进程的资源和空间,共享就会有冲突,对于多线程对同一块数据处理的冲突问题,一个办法就是加互斥锁,另一个办法就是利用threading.local threading.local 实现的的基本思路: 给一个进程中的多个线程开辟独立的空间来分别保存它们的值.这样它就不会更改全局变量了. 情况一,开多个线程更改全局变量,然后每次线程打印全局变量的值…
知识储备 偏函数 作用 偏函数,帮助开发者自动传递参数. 使用 import functools def index(a1, a2): return a1 + a2 # 原来的调用方式 # ret = index(1,23) # print(ret) # 偏函数,帮助开发者自动传递参数 new_index = functools.partial(index, 666) ret = new_index(1) ret = new_index(1) print(ret) 例: super class…
一.上下文管理相关知识点: a.类似于本地线程 创建Local类: { 线程或协程唯一标识: { 'stack':[request],'xxx':[session,] }, 线程或协程唯一标识: { 'stack':[] }, 线程或协程唯一标识: { 'stack':[] }, 线程或协程唯一标识: { 'stack':[] }, } b.上下文管理的本质 每一个线程都会创建一个上面那样的结构, 当请求进来之后,将请求相关数据添加到列表里面[request,],以后如果使用时,就去读取 列表中…
小知识 子类继承父类的三种方式 class Dog(Animal): #子类 派生类 def __init__(self,name,breed, life_value,aggr): # Animal.__init__(self,name,breed, life_value,aggr)#让子类执行父类的方法 就是父类名.方法名(参数),连self都得传 super().__init__(name,life_value,aggr) #super关键字 ,都不用传self了,在新式类里的 # supe…
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__getitem__系列. __call__ 这个方法相信大家并不陌生,在单例模式中,我们可能用到过,除此之外,还想就没有在什么特殊场景中用到了.我们往往忽视了它一个很特殊的用法:对象object+()或者类Foo()+()这种很特殊的用法.在Flask上下文管理中,入口就是使用了这种方式. __getit…
知识点回顾 1.子类继承父类的三种方式 class Dog(Animal): #子类 派生类 def __init__(self,name,breed, life_value,aggr): # Animal.__init__(self,name,breed, life_value,aggr)#让子类执行父类的方法 就是父类名.方法名(参数),连self都得传 super().__init__(name,life_value,aggr) #super关键字 ,都不用传self了,在新式类里的 #…
基本流程概述 - 与django相比是两种不同的实现方式. - django/tornado是通过传参数形式实现 - 而flask是通过上下文管理, 两种都可以实现,只不实现的方式不一样罢了. - 上下文管理: - 说上下文管理前要先提一下threadinglocal,它为每一个线程开辟一块独立的空间,但是Flask不是用它做得,它自己实现类一个local类 - 其中创建了一个字典来保存数据,这个字典的key是用线程的唯一标识,如果有协程用greelet拿的一个唯一标识,可以是线程的也可以支持协…
基本流程概述 - 与django相比是两种不同的实现方式. - django/tornado是通过传参数形式实现 - 而flask是通过上下文管理, 两种都可以实现,只不实现的方式不一样罢了. - 上下文管理: - 说上下文管理前要先提一下threadinglocal,它为每一个线程开辟一块独立的空间,但是Flask不是用它做得,它自己实现类一个local类 - 其中创建了一个字典来保存数据,这个字典的key是用线程的唯一标识,如果有协程用greelet拿的一个唯一标识,可以是线程的也可以支持协…
一.一些python的知识 1.偏函数 def add(x, y, z): print(x + y + z) # 原本的写法:x,y,z可以传任意数字 add(1,2,3) # 如果我要实现一个功能,这三个数中,其中一个数必须是3 # 我们就可以使用偏函数来帮着我们传参 from functools import partial # partial:给add这个函数固定传一个数字 3 new_add = partial(add, 3) # 因此新的函数只需要传2个参数 new_add(1,1)…
Flask上下文管理 分类: 请求上下文管理 应用上下文管理 请求上下文管理 request a. 温大爷:wsig b. 赵毅: ctx = ReuqestContext(session,request) ctx.push() c. 刘松:LocalStack,把ctx对象添加到local中 d. 空调:Local __storage__={ 1321:{stack:[ctx,]} } session a. 温大爷:wsig b. 赵毅: ctx = ReuqestContext(sessio…
Flask的上下文对象 Flask有两种Context(上下文),分别是 RequestContext 请求上下文 Request 请求的对象,封装了Http请求(environ)的内容 Session 根据请求中的cookie,重新载入该访问者相关的会话信息. AppContext 程序上下文 g 处理请求时用作临时存储的对象.每次请求都会重设这个变量 current_app 当前激活程序的程序实例 生命周期: current_app的生命周期最长,只要当前程序实例还在运行,都不会失效. Re…
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__getitem__系列. __call__ 这个方法相信大家并不陌生,在单例模式中,我们可能用到过,除此之外,还想就没有在什么特殊场景中用到了.我们往往忽视了它一个很特殊的用法:对象object+()或者类Foo()+()这种很特殊的用法.在Flask上下文管理中,入口就是使用了这种方式. __getit…
session的源码流程 将session放置在redis中 安装 pip install flask-session 使用 import redis from flask import Flask,request,session from flask.sessions import SecureCookieSessionInterface from flask_session import Session app = Flask(__name__) app.config['SESSION_TY…
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__getitem__系列. __call__ 这个方法相信大家并不陌生,在单例模式中,我们可能用到过,除此之外,还想就没有在什么特殊场景中用到了.我们往往忽视了它一个很特殊的用法:对象object+()或者类Foo()+()这种很特殊的用法.在Flask上下文管理中,入口就是使用了这种方式. __getit…
Flask请求上下文管理 1 偏函数 partial 使用该方式可以生成一个新函数 from functools import partial def mod( n, m ): return n % m mod_by_100 = partial( mod, 100 ) # 100传给n print mod( 100, 7 ) # 2 print mod_by_100( 7 ) # 2 2 线程安全 import time from threading import local class Foo…
1. werkzurg from werkzur.serving import run_simple def run(environ,start_response): reuturn [b'hello world'] if __name__ == "__main__": run_simple('localhost',4000,run) # run_simple --> 启动监听接收 socket(一个死循环): run 会加上 () 去执行 2. 所有请求的入口 def __ca…
基于DBUtils实现数据库连接池 小知识: 1.子类继承父类的三种方式 class Dog(Animal): #子类 派生类 def __init__(self,name,breed, life_value,aggr): # Animal.__init__(self,name,breed, life_value,aggr)#让子类执行父类的方法 就是父类名.方法名(参数),连self都得传 super().__init__(name,life_value,aggr) #super关键字 ,都不…
参考 http://flask.pocoo.org/docs/1.0/advanced_foreword/#thread-locals-in-flask https://zhuanlan.zhihu.com/p/33732859 https://www.zhihu.com/question/25033592/answer/34449852 https://www.zhihu.com/question/269905592/answer/364928400 http://flask.pocoo.or…
flask上下文管理 1.运用的知识点 val = threading.local() def task(arg): #threading.local() val.xxx=123 #内部,获取当前线程的id,{线程id:{xxx:123}},通过折冲方式区分变量位置 #flask则是协程方式区分,各个连接对象(升级的threading.local) 2.偏函数 生成的函数可以先封装部分参数 ex:def add(a,b): def add(a,b):       return a+b; impo…
上下文管理:    - 请求上下文 (ctx=RequestContext())  : request/session    - App上下文  (app_ctx=AppContext())  : app/g 1. 请求进来执行 __call__ 方法.2. __call__ 方法调用 wsgi_app.3. wsgi_app:    - (1)实例化两个方法:    ctx = RequestContext(request,session)    app_ctx = AppContext(ap…
前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活. flask的session机制 session是用来干什么的呢?由于http协议是一个无状态的协议,也就是说同一个用户第一次请求和第二次请求是完全没有关系的,但是现在的网站基本上有登录使用的功能,这就要求必须实现有状态,而session机制实现的就是这个功能. 实现的原理: 用户第一次请求后,将…
基于DBUtils实现数据库连接池 小知识: 1.子类继承父类的三种方式 class Dog(Animal): #子类 派生类 def __init__(self,name,breed, life_value,aggr): # Animal.__init__(self,name,breed, life_value,aggr)#让子类执行父类的方法 就是父类名.方法名(参数),连self都得传 super().__init__(name,life_value,aggr) #super关键字 ,都不…
问题场景: 在falsk项目中导入了两个session:    首先,配置文件config.py文件中 有个 flask_session扩展导入了Session  ( from flask_session import Session ): 然后,在login.py文件的登录接口中  有从flask导入了session   (from flask import session): 先阐述一下状态保持的概念以及浏览器服务器如何实现状态保持: 1 状态保持: 有时需要保持下来用户浏览的状态,比如用户…