1.web服务器
web服务器是一种服务器网关接口(WSGI),它把来自客户端的所有请求都转交给web服务器处理。flask创建这种程序实例来处理客户端请求。初始化方式如下:
import flask from Flask
app = Flask(__name__)
其中__name__是主程序或者包的名称,用来确定包内资源路径。
2.路由和视图函数
路由就是程序实例知道怎么处理来自客户端的各种请求。简单的说就是客户端来的url和处理的视图函数的之间的映射关系。
flask采用装饰器来完成这种映射。
@app.route("/")
def index():
return "<h1>hello, world!</h1>"
上述代码就完成了主页的映射。而index()这种处理url请求的函数就是视图函数。
接受参数的视图函数
@app.route("/user/<name>")
def user(name):
return "<h1>hello, %s</h1>" % name
当然也可以传入类型,如果只处理int型的参数,则可以写成<int:name>。目前flask接受三种类型int,float,path(类似于string,只是把“/”当作字符处理)
3.完整的web程序
import flask from Flask
app = Flask(__name__)
@app.route("/")
def index():
return '<h1>hello, word!</h1>'
if __name__ == "__main__":
app.run(debug=True) //以调试模式运行,便于观察日志
运行这个程序之后便可以在浏览器上访问了。
4.Flask的请求响应原理
都知道,web服务器都有一些类似全局变量的数据。jsp有内置对象,为了便于后台跟前端的通信,Flask也存在这种对象。
在Flask中,这种对象分为两种:程序上下文和请求上下文。Flask在请求分发之前激活这些对象,请求完成之后再删除。
程序上下文:
current_app #当前激活程序的程序实例
g #请求处理时用做临时存储数据的对象,每次请求都会重设这个值
请求上下文:
request,session
5.请求映射
可以通过Flask 中的url_map变量查看当前的映射集合。
例如查看上面的hello.py映射集合
from hello import app
app.url_app
6.请求钩子
请求钩子主要是针对那种需要重复利用的功能比如权限验证,用户登录验证或者处理请求之前之后调用。采用装饰器实现。
Flask有四种请求钩子:
before_first_request 注册一个函数,在第一个请求处理之前执行
before_request 注册一个函数,在请求之前执行。
after_request 注册一个函数,如果没有未处理的异常抛出来,则在每次请求之后执行
teardown_request 注册一个函数,即使有未处理的异常,还是会在每次请求之后执行
7.Flask扩展
Flask被设计成可扩展形式,因此他只有最核心的一些功能。对于数据库等其他的功能,则是采用扩展模块的形式来完成。
进入到虚拟环境采用pip install 模块名 形式安装扩张模块