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 有存储就有读取及删除,那么就拿购物车来举例 在我们登陆的时候会有之前在购物车存放的物品.也就是说在一个地方为我们保存 ...
随机推荐
- JavaScript中的原型和原型链
1.原型是什么?原型链是什么? 原型是一个prototype对象,用于表示类型之间的关系: 原型链指的是在JavaScript中对象之间的继承是通过prototype对象指向父类对象,直到指向Obje ...
- 题目一:使用Java实现二维数组中的查找
考点:数组 题目:二维数组中的查找 描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判 ...
- Mysql 启动失败常见错误
各位可以按照顺序逐条拍错. mysql启动时报错:Starting MySQL... ERROR! The server quit without updating PID file (/opt/my ...
- 快速安装测试版Mysql
本文操作系统: CentOS 7.2.1511 x86_64MySQL 版本: 5.7.13 1.卸载系统自带的 mariadb-lib [root@centos-linux ~]# rpm -qa| ...
- echarts tooltip太多会超出显示范围-解决
以下两种解决方式,能够应对大部分出现此类问题项目 tooltip.position: 提示框浮层的位置,默认不设置时位置会跟随鼠标的位置. 可选:string, Array, Function 一.解 ...
- January 23 2017 Week 4 Monday
Knowledge is long, life is short. 吾生也有涯,而知也无涯. I often feel that I have a lot of things to learn, ne ...
- 安装ale_python_interface时遇到make错误
1. 首先按照https://pypi.org/project/ale-python-interface/0.0.1/来安装,直接python3 -m pip 但提示缺少一个头文件ale_c_wrap ...
- 初窥IM通信协议
即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议. 前者是以数据流的形式,将传输数 ...
- js获取昨天今天和明天
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/UP19910522/article/details/30028299 <html> &l ...
- Centos 7 安装Anaconda3
1.首先下载地址: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 使用清华镜像下载速度快 2.安装 bash Anaconda3-5.1 ...