Flask源码:介绍

Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权

Flask的源码不是很多,可以说很少,关键的App.py带注释才两千行代码

而Flask的源码目录如下,结构非常清晰

  • __main__.py
  • _compat.py(兼容python 2/3)
  • app.py(实际的WSGI应用)
  • blueprints.py(实现蓝图功能)
  • cli.py
  • config.py(定义flask设置配置的多种方法)
  • globals.py  (全局请求上下文栈,全局应用上下文栈)
  • logging.py(使用logging模块定义Flask的日志类)
  • sessions.py  (定义session基类,利用itsdangerous实现了安全的cookies_sessions子类,类似JWT)
  • singails.py  (导入Blinker模块实现flask的信号机制,并定义了一些信号量)
  • templating.py  (隐藏Jinja2的render接口,实现flask自己的render接口)
  • views.py  (实现类似django的as_view()方法)
  • wrapper.py  (WSGI框架request和reponse基类的一些封装)

WSGI 工具箱采用 Werkzeug

WSGI,全称Web服务器网关接口,或者Python Web服务器网关接口,是基于Python定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。WSGI接口的作用是确保HTTP请求能够转化成蟒蛇应用的一个功能调用,这也就是网关的意义所在,网关的作用就是在协议之前进行转换。
WSGI接口中有一个非常明确的标准,每个Python的网络应用必须是可调用的可调用的对象且返回一个iterator,并实现app(environ,start_response)的接口,server会调用应用程序,并传递给它的两个参数:environ包含请求的所有信息,start_response是应用程序处理完之后需要调用的函数,参数是状态码,响应头部还有错误信息引用。

模板引擎则使用 Jinja2

Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全:

<title>{% block title %}{% endblock %}</title>
<ul>
{% for user in users %}
  <li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>

特性:

  • 沙箱中执行
  • 强大的 HTML 自动转义系统保护系统免受 XSS
  • 模板继承
  • 及时编译最优的 python 代码
  • 可选提前编译模板的时间
  • 易于调试。异常的行数直接指向模板中的对应行。
  • 可配置的语法

信号机制使用blinker

Blinker 是一个基于Python的强大的信号库,它既支持简单的对象到对象通信,也支持针对多个对象进行组播。Flask的信号机制就是基于它建立的。

Blinker的内核虽然小巧,但是功能却非常强大,它支持以下特性:

  • 支持注册全局命名信号
  • 支持匿名信号
  • 支持自定义命名信号
  • 支持与接收者之间的持久连接与短暂连接
  • 通过弱引用实现与接收者之间的自动断开连接
  • 支持发送任意大小的数据
  • 支持收集信号接收者的返回值
  • 线程安全

SecureCookieSessionInterface使用itsdangerous(类似jwt)

有时您只想将一些数据发送到不受信任的环境。但如何安全地做到这一点呢?诀窍在于签字。给一个只有你知道的密钥,你可以用加密的方式签署你的数据并把它交给其他人。当你拿回数据时,你可以很容易地确保没有人篡改它。
当然,接收者可以解码内容并查看包,但除非他们也有您的密钥,否则不能修改内容。所以,如果你保守秘密和复杂,你会没事的。
在内部,它的危险性默认使用HMAC和SHA1进行签名,并基于Django签名模块实现。不过,它也支持JSON Web签名(JWS)。图书馆是BSD许可证,由Armin Ronacher编写,尽管设计和实现的大部分版权归Simon Willison和其他让这个图书馆成为可能的令人惊叹的Django人所有。

发布了23 篇原创文章 · 获赞 0 · 访问量 2020

猜你喜欢

转载自blog.csdn.net/qq_33913982/article/details/104242706
今日推荐