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对象,

不信你看, 有图为证

扫描二维码关注公众号,回复: 4610927 查看本文章

request到底是怎么回事

要想知道reqeust是怎么回事, 就要从用户的请求进来开始说了, 

还有一件事就是当flask启动的时候, 也就是执行run的时候都做了什么, 因为globas这个模块肯定是被加载了, 只要一加载

globals中会有好多对象, 现在只知道这个里面的对象都是去全局的就可以.

werkzeug介绍

 Flask 是一个微型的 Python 开发的 Web 框架,基于Werkzeug WSGI工具箱和Jinja2模板引擎,使用BSD授权。 

看看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          我是传进来的参数

无码高清大图

猜你喜欢

转载自www.cnblogs.com/594504110python/p/10162928.html
今日推荐