1. Flask基本概念
- Flask 是 Python 编写的一款轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2。Flask 使用 BSD 授权。其中两个环境依赖是 Werkzeug 和 jinja2,这意味着它不需要依赖外部库。正因如此,我们将其称为轻量级框架。
对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。
1.1 WSGI是什么?
WSGI(web服务网关接口(Python Web Server Gateway Interface,缩写为WSGI)的本质是一种约定,是Python web开发中 web服务器与web应用程序之间数据交互的约定。
网关协议的本质是为了解耦,实现web服务器和web应用程序的分离,WSGI就是一个支持WSGI的web服务器与Python web应用程序之间的约定。
1.2 Flask的优点
Flask属于微框架(micro-framework)这一类别,微架构通常是很小的不依赖外部库的框架。
- 框架很轻量
- 更新时依赖小
- 专注于安全方面的bug
1.3 Flask框架依赖组件
- Route(路由)
- templates(模板)
- Models(ORM模型)
- blueprint(蓝图)
- Jinja2模板引擎
1.4 Flask钩子函数
在Flask中钩子函数是使用特定的装饰器的函数。钩子函数可以在正常执行的代码中,插入一段自己想要执行的代码,那么这种函数就叫做钩子函数。
常用的钩子函数:
- before_first_request:处理第一次请求之前执行。
@app.before_first_request
def first_request():
print("first time request")
- before_request:在每次请求之前执行,通常可以用这个装饰器来给视图函数增加一些变量。
@app.before_request
def before_request():
id = session.get('id')
name = session.get('name')
if id:
g.user = name
- context_processor:上下文处理器,返回的字典中的键可以在模板上下文中使用。
@app.context_processor
def my_context_processor():
if hasattr(g, 'user'):
return {'login_user': g.user}
return {}
- template_filter:在使用Jinja2模板的时候自定义过滤器。比如可以增加一个upper的过滤器。
@app.template_filter
def upper_filter(s):
return s.upper()