Flask的request和session是从哪里来的?
因为之前一直在项目中使用django, 所以在学习Flask的过程中, 难免对吧django和Flask进行对比,
这一次我发现Flask中的request和session并没有想象的那么简单, 所以就读了一下这一部分的源码,
读完之后对整个过程理解了一番, 好像并没有get到Flask的开发这个这样写的原因什么, 以后再使用Flask
的过程中希望能渐渐的明白这个其中的原因吧, 要是有老铁能指点一二, 那就更好了, 评论区见吧老铁
PS: 我觉得你应该也不知道, 否则你怎么会沦落到看我博客的地步呢, 哈哈
我发现
django中使用request, 这个和request是视图函数传进来的参数, 当用户请求进来后, 根据URL进入不同的视图, 随之
当前请求的request也被传进来了, 所以的django的request的由来很清楚, Flask中的request并非如此, 当你点击request时
会发现, 他是另外一个叫做globals.py中的一个对象, 从名字上就可以看出, 这是一个全局的变量, 而且是在当前模块内
实例化好的一个对象, 都是知道, python的模块导入就是一个天然的单例, 也就是说, 在整个flask程序中就这一个request对象,
不信你看, 有图为证

request到底是怎么回事
要想知道reqeust是怎么回事, 就要从用户的请求进来开始说了,
还有一件事就是当flask启动的时候, 也就是执行run的时候都做了什么, 因为globas这个模块肯定是被加载了, 只要一加载
globals中会有好多对象, 现在只知道这个里面的对象都是去全局的就可以.
werkzeug介绍
看看werkzeug是如何工作的
from werkzeug.wrappers import Response, Request
from werkzeug.serving import run_simple @Request.application
def app(req): # 接受一个request
print(req)
# < Request http: // 127.0.0.1: 8800 / favicon.ico [GET] >
print(req.method)
# GET
print(req.path)
# /
return Response("200 OK!") run_simple(hostname="127.0.0.1", port=8800, application=app)
运行上面的代码, 就会启动一个服务, 浏览器就可以直接访问, 并且返回页面 200 OK!
简单说当请求进来之后就会执行application=app, 也就是对app进行加括号执行, 记住一个加括号, 后面会用到的.
flask上下文管理之存放用户请求高清无码大图
有了上面的问题, 在加上知道了werkzeug是如何接受用户的请求的, 那么就可以看图说话了
记住当接受到请求请求后, werkzeug会对app进行加括号执行

当使用request时又发生了什么
看完上面的图, 就能大概了解, request使用哪里来, 存放了哪里, 那么我们又是怎么使用request的呢, 看下面又一副大图
偏函数的简单了解
源码中用到了一个偏函数, 看看偏函数大概是怎么用的
from functools import partial def add(a, b): # 这个函数需要两个参数
return str(a) + str(b) ret = partial(add, "request")
# 偏函数返回一个未执行的函数, 这个函数就是add函数, 并且本来需要两个参数, 现在只要一个参数就可以执行
# 偏函数固定一个add的一个参数为request
# 偏函数的源码看不到, 不过我觉得是直接操作的内容, 将参数传到了函数中
# 要是按照正常的传参的数, 函数一加括号就执行了, 但是偏函数却返回了一个已经传好参数并且未执行的函数
print(ret(" 我是传进来的参数")) # 输出
# request 我是传进来的参数
无码高清大图

Flask的request和session是从哪里来的?的更多相关文章
- 1.4 flask request和session
2019-1-4 18:13:57 越努力,越幸运! 还有121天,flask讲完,还有4天,总时长130天 还有13天就讲完了 一月争取看完!!! 永远不要高估自己! 今天学了request和ses ...
- Flask入门request session cookie(二)
1 HTTP方法分类 1 GET 浏览器告知服务器:只获取页面上的信息并发给我.这是最常用的方法. 2 HEAD 浏览器告诉服务器:欲获取信息,但是只关心消息头 .应用应像处理 GET 请求一样来处理 ...
- Flask web开发 处理Session
本文我们在上篇文章<Flask web开发 处理POST请求(登录案例)>的基础上,来讲述Flask对session的支持. 在上面案例上,我们需要修改和新增如下功能 1.登录成功后的 ...
- Flask上下文管理、session原理和全局g对象
一.一些python的知识 1.偏函数 def add(x, y, z): print(x + y + z) # 原本的写法:x,y,z可以传任意数字 add(1,2,3) # 如果我要实现一个功能, ...
- python三大框架之一flask中cookie和session的相关操作
状态保持 Cookie cookie 是指某些网站为了 辨别 用户身份,进行会话跟踪而储存在用户本地的数据(通常会经过加密),复数形式是 coolies. cookie是由服务器端生成,发送给客户端 ...
- flask 基本操作 模板语言 session
Django web:优点:大而全,ORM models ,model Form ,admin ,csrf ,session缺点:资源浪费 Flask web:优点:小而精,ORM:x , Form: ...
- flask框架--cookie,session
今天我又给大家分享一下怎么用flask框架来实现像淘宝购物车一样存储数据,并且把存储的数据删除,这个方法可以用两个方法都可以做成,一个是cookie,另一个是session. session是依赖于c ...
- 【Python】Flask系列-cookie和session笔记
cookie: 1.cookie出现的原因:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了 ...
- flask的cookie和session的简单原理
在Flask的框架中,自己已经封装了 cookie的respons,request 有存储就有读取及删除,那么就拿购物车来举例 在我们登陆的时候会有之前在购物车存放的物品.也就是说在一个地方为我们保存 ...
随机推荐
- HTML头部声明文件类型
在你每一个页面的顶端,你需要文件声明.是的,必须. 如果不指定文件类型,你的HTML不是合法的HTML,并且大部分浏览器会用“怪癖模式(quirks mode)”来处理页面,这意味着浏览器认为你自己也 ...
- Elasticsearch 2.x.x版本如何安装bigdesk
ES插件BigDesk安装 bigdesk支持的最新版本的ES是1.3.0 ... 1.3.x 然而想要在新版本ES上安装(2.x.x),项目中遇到过一些BUG,在ES在最新版本中有修复,所以采用了2 ...
- msvcr100.dll问题描述及修复方式
出现问题的大部分原因是因该文件被木马病毒破坏导致系统找不到此文件,出现错误提示框,想要解决此问题只需找到专业的DLL文件下载网站,下载该文件,复制到相应目录.即可解决.msvcr100.dll为Vis ...
- 基于NFS实现多WEB服务器负载均衡
实现环境: 实现原理: 共四台服务器 A,B,C,D 服务器A (CentOS 6.7): IP地址: 192.168.3.67 角色: DNS服务 说明: 为两台web服务器做域名轮询 服务器B,C ...
- python功能代码块记录
python Autopep8——按PEP8风格自动排版Python代码(参考链接) autopep8 --in-place --aggressive --aggressive test_autope ...
- 模糊搜索框(H5),兼容安卓和ios(令人头大的ios输入法)
项目里要可以实现,按照模糊,于是从jq22网站找到一个代码,效果如图: 具体的html代码:(复制,需要引入jq相关的支持文件) <!DOCTYPE html PUBLIC "-//W ...
- AngularJs学习笔记--Understanding Angular Templates
原版地址:http://docs.angularjs.org/guide/dev_guide.mvc.understanding_model angular template是一个声明规范,与mode ...
- 使用combineReducers注意事项
一.从‘redux’包中引入combineReducers方法: import { combineReducers } from 'redux'; 二.针对state的不同属性写不同的reducer, ...
- 如何使用Excel选择整列排序
在excel中,排序的时候弹窗提示“若要执行此操作,所有合并单元格需大小相同”,该怎么操作才能实现排序呢?接下来,小编就和大家分享具体操作. 工具/原料 excel 方法/步骤 打开出 ...
- 【深入理解JVM】:Java内存模型JMM
多任务和高并发的内存交互 多任务和高并发是衡量一台计算机处理器的能力重要指标之一.一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标 ...