Flask中的一些问题的初步汇总三

Flask有两大核心:Werkzeug和Jinja2

  • Werkzeug实现路由、调试和Web服务器网关接口
  • Jinja2实现了模板。
    Werkzeug是一个遵循WSGI协议的python函数库
  • 其内部实现了很多Web框架底层的东西,比如request和response对象;
  • 与WSGI规范的兼容;支持Unicode;
  • 支持基本的会话管理和签名Cookie;
  • 集成URL请求路由等。

Werkzeug库的 routing 模块负责实现 URL 解析。不同的 URL 对应不同的视图函数,routing模块会对请求信息的URL进行解析,匹配到URL对应的视图函数,执行该函数以此生成一个响应信息。
routing模块内部有
Rule类
用来构造不同的URL模式的对象,路由URL规则
Map类
存储所有的URL规则和一些配置参数
BaseConverter的子类
负责定义匹配规则
MapAdapter类
负责协调Rule做具体的匹配的工作

简而言之 Werkzeug实现了路由功能 Jinja2实现了模板功能

上下文:相当于一个容器,保存了 Flask 程序运行过程中的一些信息。
Flask中有两种上下文,请求上下文和应用上下文
请求上下文(request context)

在 flask 中,可以直接在视图函数中使用 request 这个对象进行获取相关数据,而 request 就是请求上下文的对象,保存了当前本次请求的相关数据,请求上下文对象有:request、session
request
封装了HTTP请求的内容,针对的是http请求。
举例:user = request.args.get(‘user’),获取的是get请求的参数。
session
用来记录请求会话中的信息,针对的是用户信息。
举例:session[‘name’] = user.id,可以记录用户信息。
还可以通过session.get(‘name’)获取用户信息。

应用上下文(application context)
它的字面意思是 应用上下文,但它不是一直存在的,它只是request context 中的一个对 app 的代理(人),所谓local proxy。它的作用主要是帮助 request 获取当前的应用,它是伴 request 而生,随 request 而灭的。
应用上下文对象有:current_app,g
current_app
应用程序上下文,用于存储应用程序中的变量,可以通过current_app.name打印当前app的名称,也可以在current_app中存储一些变量,
例如:
应用的启动脚本是哪个文件,启动时指定了哪些参数
加载了哪些配置文件,导入了哪些配置
连了哪个数据库
有哪些public的工具类、常量
应用跑再哪个机器上,IP多少,内存多大
current_app.name
current_app.test_value=‘value’
g变量
g 作为 flask 程序全局的一个临时变量,充当者中间媒介的作用,我们可以通过它传递一些数据,g 保存的是当前请求的全局变量,不同的请求会有不同的全局变量,通过不同的thread id区别
g.name=‘abc’
注意:不同的请求,会有不同的全局变量
两者区别:
请求上下文:保存了客户端和服务器交互的数据
应用上下文:flask 应用程序运行过程中,保存的一些配置信息,比如程序名、数据库连接、应用信息等

其中部分信息来源于网上资料和书籍,如有雷同,纯属信息时代的快速发展,大同小异。

猜你喜欢

转载自blog.csdn.net/weixin_44266137/article/details/85252977
今日推荐