Python项目Flask ipv6双栈支持改造
一、背景
Flask 是一个微型的(轻量)使用Python 语言开发的 WSGI Web 框架(一组库和模块),基于Werkzeug WSGI工具箱/库和Jinja2 模板引擎,当然,Python的WEB框架还有:Django、Tornado、Webpy,这暂且不提。 Flask使用BSD授权。 Flask也被称为microframework(微框架),Flask 的目标是保持核心简单而又可扩展,即它采用了简单的核心,缺省情况下, Flask 不包含数据库抽象层、表单验证或者其他已有的库可以处理的东西,其他的功能可用Flask-extension增加:ORM、窗体验证工具、文件上传、各种开放式身份验证技术等就行Flask原生一样。由于这些特性,它使用简单,自由性强,可以帮助用户很方便得快捷搭建自己的web服务器,被广泛应用,尤其适合构建小到中型规模的Web应用。 另外,Flask支持RESTful ,Flask很容易使用RESTful API,可以轻松地创建RESTful Web服务。Flask与别的框架(尤其是采用其他编程语言的框架)的不同之处在于:它没有绑定诸如数据库查询或者表单处理等功能库,以及它们所组成的整个生态系统。它倾向于对这些功能的实现方式不做任何限定,让开发者更专注于核心代码,随需扩展。下图是场景的一种Flask Web架构:
现场业务场景中采用如上图类似的架构,也通过gunicorn管理Flask web项目,对外提供服务;但是集团要求,要全部实现ipv6(三级ipv6实现:浏览器内转三级功能,都完成支持ipv6);现场发现Flask web应用并没监听ipv6地址,Gunicore也未监听;那如何配置呢,最终实现IPv4/6双栈支持。
现场环境版本: Python3.6.3和2.7.18、Werkzeug (0.16.0)、tensorflow (1.6.0)、numpy (1.18.0)、wheel (0.33.6)
、wrapt (1.11.2)、setuptools (42.0.2)、six (1.13.0)、opencv-python (4.1.2.30)、pandas (0.25.3)、Jinja2 (2.10.3)、gunicorn (19.9.0)、gevent (1.3.5)、Flask (1.1.1)、Click (7.0)、backports.lzma (0.0.14)、
相关资源链接:jinja、Flask中文文档、Flask英文文档、python-docx、pandas、sourceforge、codingdict编程字典、pytorch中文、numpy中文、numpy文档、python3、Flask中文文档、Flask介绍、Flask快速指南、Flask GitHub、Flask三方文档、gunicorn配置指导、前端入门和进阶学习笔记、Flask官方文档
二、Flask框架及说明
2.1、相关概念回顾
WSGI:即Web服务器网关接口(WSGI), 它是Web服务器和Web应用程序之间通用接口的规范。已被采纳为Python Web应用程序开发的标准。WSGI将Web服务分成两个部分:服务器和应用程序。WGSI服务器只负责与网络相关的两件事:接收浏览器的HTTP请求、向浏览器发送HTTP应答;而对HTTP请求的具体处理逻辑,则通过调用WSGI应用程序进行。Python使用wsgi网关进行Web开发,flask基于wsgi网关,flask中实例的app,也称之为一个wsgi 应用。
WERKZEUG:它是一个WSGI工具包,实现了请求,响应对象和其他实用程序功能。 这可以在其上构建Web框架。 Flask框架使用Werkzeug作为其一个基础模块之一。
Jinja2:它是Python的流行模板引擎。 网页模板系统将模板与特定的数据源结合起来就能呈现出动态网页。
Python的框架基本都是MTV的:
M:Models 模型层,负责数据库建模 与数据库打交道
T:Templates 模板层,用于处理用户显示的网页内容
V:Views:视图层,负责业务逻辑,并在适当时候调用Model和Template,用于处理与用户交互的部分,处理用户的请求并给出响应内容。
URL分发器:将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template
当Flask Web项目运行时, 如果接收到前端的请求时通过控制层解析并且匹配route路由找到相应的视图函数之后执行业务层逻辑的处理, 在业务逻辑处理的时候如有需要便可以快速调用REST API接口以对接特定的服务;当有需要操作数据库时便可以交给数据层处理, 数据库的操作可调用ORM模型将数据库内容实例化成对象来完成数据访问。
而其他语言框架多采用MVC架构:
M:Models 模型层,负责业务对象和数据库的关系映射(ORM)。
V:Wiews 视图层,用处处理用户显示的内容的,等同于MTV的 T
C:Controller:控制器,处理用户的请求与响应等同于MTV的 V
三个部分的关系示意图如下:
Flask框架的一些概念:
1.应用程序对象:应用程序对象是Flask应用程序的核心对象。它是一个Flask类的实例。应用程序对象是用于创建Web应用程序的主要接口。
2.上下文:Flask框架中有两种上下文:应用程序上下文和请求上下文。应用程序上下文为应用程序提供了一个全局上下文,而请求上下文则为每个请求提供了一个上下文。
3.路由:它是Flask应用程序中的URL映射。它指定了URL与视图函数之间的关系。
4.视图函数:视图函数是Flask应用程序中处理请求的函数。它们使用装饰器将路由绑定到函数上。
5.模板:模板是Flask应用程序中用于渲染HTML页面的文件。它们使用Jinja2模板引擎进行渲染。
6.表单:表单是Flask应用程序中用于收集用户输入数据的HTML表单。一般使用WTForms库进行验证和处理。
对比,Flask 框架主要的模块如下:
1、应用模块:Flask 的核心模块,负责创建 Flask 应用程序对象,并定义一些应用程序级别的配置和功能,负责管理整个应用程序的生命周期。它是整个 Web 应用程序的入口,负责接收 HTTP 请求并返回响应。它还负责路由、错误处理、上下文等功能。
2、路由模块:Flask 使用装饰器来定义 URL 路由和视图函数之间的映射关系。
3、视图模块:视图函数是 Flask Web 应用程序的核心,它处理 HTTP 请求并返回响应,可以返回 HTML 页面、JSON 数据等。
4、模板模块:Flask 使用 Jinja2 模板引擎来生成 HTML 页面。模板引擎提供了丰富的语法和过滤器,可以轻松地生成复杂的 HTML 页面。模板就是一个包含响应文本的文件 通常也是HTMl文件,该文件中可以包含“占位变量” 来表示动态的内容,具体值 只有在请求中才能获取 “占位变量"最后会被真实的值替换,模板最终也会被解析成响应的字符串 这一过程也称为"渲染”。默认情况下 Flask会在程序文件夹中的 templates 子文件夹中自动寻找模板,默认需要收动创建 templates 子文件夹 ,里面放HTML文件。
5、数据库模块:Flask 可以轻松地集成多种数据库,包括 MySQL、PostgreSQL、SQLite 等。
6、表单模块:Flask-WTF 是 Flask 的表单处理扩展,提供了方便的表单处理方法,可以轻松地创建表单、验证表单数据等。
7、扩展模块:Flask 的扩展模块提供了各种功能,如邮件发送、缓存、登录认证等。
其中,应用模块通常包括以下内容:
1)创建应用程序对象:使用 Flask 类创建应用程序对象。Flask 类的构造函数需要传入应用程序的名称作为参数。
2)配置应用程序:可以使用 config 属性来配置应用程序的基本属性,如调试模式、密钥、数据库连接等。
3)注册路由:使用 route 装饰器来注册 URL 路由和视图函数之间的映射关系。路由定义了 HTTP 请求的 URL 地址和视图函数之间的映射关系。
4)定义视图函数:视图函数是处理 HTTP 请求的函数,可以返回 HTML 页面、JSON 数据等。视图函数通常使用 route 装饰器定义 URL 路由。
5)上下文管理:Flask 应用程序使用上下文对象来管理:请求上下文和应用上下文。请求上下文包含了每个 HTTP 请求的相关信息,如请求头、请求参数等。应用上下文包含了应用程序的相关信息,如配置信息、数据库连接等。
6)错误处理:Flask 应用程序可以通过注册错误处理函数来处理 HTTP 请求中出现的错误,如 404 错误、500 错误等。
7)扩展管理:Flask 应用程序可以通过注册扩展对象来增加应用程序的功能,如数据库连接、缓存、邮件发送等。
8)启动应用程序:通过 run 方法启动应用程序,使其可以接收 HTTP 请求。
#导入了 Flask 类和 render_template 函数,Flask使用render_template 函数封装了Jinja2模板引擎,web网页模板需要flask内的render_template模块
from flask import Flask,render_template
#创建了一个 Flask 应用程序对象,使用了__name__ 作为应用程序的名称
app = Flask(__name__)#配置应用程序的基本属性,包括调试模式和密钥等
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'your_secret_key'#或者单独写入待外部文件,这里调用即可
app.config.from_pyfile('config.ini')'''注册路由和视图函数;使用 @app.route() 装饰器来注册 URL 路由和视图函数之间的映射关系
定义了三个视图函数,分别对应不同的 URL 地址,对应返回不同的响应内容'''
@app.route('/')
def hello():return 'hello world'
@app.route('/user/<name>')
def user(name): return 'Hello, %s !' % name
#/hello/ 和 /hello/<name> 两个路由对应的是同一个视图函数,使用了 Flask 支持的多路由规则
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None): return render_template('hello.html', name=name) '''使用render_template模块来渲染模板文件,通过第二个参数传递数据变量;传入render_template()内的第一个参数是html模板名,后面的参数都是键值对;传参时是赋值式(在html内的标识)= (传入的变量名),也可以用args,把数据以key value 形式传入字典把整个字典变量名传入到html里,直接调用key即可'''#字典传入模板案例
@app.route('/')
def index():my_str = 'hello world'my_int = 123my_list = [1, 2, 3, 48, 93]my_dict = {'name': '张兰', 'age': 19
相关文章:

Python项目Flask ipv6双栈支持改造
一、背景 Flask 是一个微型的(轻量)使用Python 语言开发的 WSGI Web 框架(一组库和模块),基于Werkzeug WSGI工具箱/库和Jinja2 模板引擎,当然,Python的WEB框架还有:Django、Tornado、Webpy,这暂且不提。 Flask使用BSD授权。 Flask也被称为microframework(微框架),F…...

hcia 目的mac为(单播 组播 广播)mac
从下往上看...

专栏十:10X单细胞的聚类树绘图
经常在文章中看到对细胞群进行聚类,以证明两个cluster之间的相关性,这里总结两种绘制这种图的方式和代码,当然我觉得这些五颜六色的颜色可能是后期加的,本帖子只总结画树状图的方法 例一 文章Single-cell analyses implicate ascites in remodeling the ecosystems of pr…...
linux查找命令使用的正则表达式
正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。 正则表达式可以在文本中查找、替换、提取和验证特定的模式。 一般的查找命令是:grep,sed,awk 元字…...

ffmpeg6.0编译(NDK)
ffmpeg 6.0 支持vulkan 需要手动安装Vulkan 并将include里面的vk_video 和 vulkan 拷贝到 android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ vulkan 下载 cp -r vk_video $NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/…...
达观RPA实战-编码与解码
一、应用背景 项目中我们经常需要获取某个服务的JSON数据。如果响应返回的是JSON格式的数据,客户端通过JSON工具可正常解析。但如果碰到值里面有中文的,特别是返回的格式是类似“{"name": "\u5927\u7231\u4e2d\u56fd"}”处理起来会比较麻烦。本文将从编…...
配置Swagger开发环境有效,生产环境无效
安全扫描:通用信息泄漏【未授权访问ip:端口号/swagger-ui.html】 步骤一:配置启用变量【开发环境可用生产环境不可用】 application-dev.yml: swagger:enable: true application-pro.yml: swagger:enable: false 步骤二:根据配置变量控…...
Jmeter系列-线程组的执行顺序(10)
重点 每个测试计划至少需要有一个线程组 线程组下不同组件的执行优先级/顺序 1、配置元件、监听器 2、前置处理器 3、定时器 4、逻辑控制器 5、取样器 6、后置处理器 7、断言 取样器执行顺序 在没有逻辑控制器情况下,取样器是按从上往下的顺序执行的 参考文章…...
c# 面试题
简述 private、 protected、 public、 internal 修饰符的访问权限。 答: Private(拍非得) : 私有成员, 在类的内部才可以访问。 protected (普泰忒): 保护成员,该类内部和继承类中可以访问。 Publ…...

目录优先的图片库网站PiGallery2
什么是 PiGallery2 ? PiGallery2 是一个快速的目录优先的图片库网站,具有丰富的用户界面,针对在低资源服务器(尤其是树莓派)上运行进行了优化 所谓 目录优先 是指,这种网站的设计是以显示不同的目录&#x…...
17-垃圾回收相关概念
目录 一、System.gc()的理解二、内存溢出和内存泄漏2、内存泄漏 三、Stop the World1、什么是 stop the word ? 四、垃圾回收的并行和并发1、并发和并发2、垃圾回收的并行和并发 五、安全点与安全区域1、什么是安全点?2、安全区域 六、强引用(不可回收&…...
Ubuntu-server 22.04LTS源码编译apache服务器
1 系统环境 # cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.3 LTS" NAME"Ubuntu" VERSION_ID"22.04" VERSION"22.04.3 LTS (Jammy Jellyfish)" VERSION_CODENAMEjammy IDubuntu ID_LIKEdebian HOME_URL"https://www.ubuntu.co…...

科技资讯|苹果虚拟纸可在Vision Pro中为广告、书籍等提供MR内容和动画
近日,美国专利商标局正式授予苹果一项与虚拟纸张相关的专利。这是与虚拟纸张这项发明相关的第二项专利,鉴于苹果 Vision Pro 将于明年上市,那么我们离苹果实现虚拟纸张的发明又近了一步。 虚拟纸张将能够包含 2D、3D 和动画等 MR内容&#…...

JavaScript-promise使用+状态
Promise 什么是PromisePromise对象就是异步操作的最终完成和失败的结果; Promise的基本使用: 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compati…...

xshell---git上传文件到gitee远程仓库配置
1.git下载 如果没有xshell下没有下载过git,可以参考这篇的教程:Linux配置安装 git 详细教程 下载后可以通过 git --version 查看git的版本号,验证是否安装成功 2.新建仓库 首先需要在gitee上注册一个账号 然后再主页面点击右上边框的 号…...

【GO语言基础】前言
系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录一、基础知识包和函数函数声明语法简洁性 括号成对出现GO常用DOS命令命名规则项目目录结构注释 总结 一、基础知识 包和函数 //声明本代…...
巧妙的设计
1. 判空逻辑,如果为空,抛异常,下面代码来自kafka client: Assert.notNull(queue, () -> "No cache found for " + txIdPrefix); 2. 本地cache设计,一下代码来自kafka client: private final Map<String, BlockingQueue<CloseSafeProducer<K, V&g…...

前端JavaScript中MutationObserver:监测DOM变化的强大工具
🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 引言 1. MutationObserver简介 2. MutationObserver的属性 3. MutationObserver的应用场景 3.1 动态内容加载 …...

28335 GPIO作为输入的配置记录
28335 GPIO配置为输入,可以启动输入滤波功能,看了网上很多的讲解,把滤波配置记录一下: 主要是配置两个参数: GpioCtrlRegs.GPXCTRL.bit.QUALPRDX :用于配置采样的周期,由配置值和SYSCLKOUT共同…...

js脚本解决markdown本地图片->图床问题,附源代码和编译后的exe
前提条件 安装picgo-core,安装步骤: npm install -g picgo -g 然后配置图床 picgo set uploader ? Choose a(n) uploader (Use arrow keys)smms ❯ tcyungithubqiniuimguraliyunupyun (Move up and down to reveal more choices) 配置好后便可使用项目 快速开始-获取项目…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
自定义线程池1.2
自定义线程池 1.2 1. 简介 上次我们实现了 1.1 版本,将线程池中的线程数量交给使用者决定,并且将线程的创建延迟到任务提交的时候,在本文中我们将对这个版本进行如下的优化: 在新建线程时交给线程一个任务。让线程在某种情况下…...
触发DMA传输错误中断问题排查
在STM32项目中,集成BLE模块后触发DMA传输错误中断(DMA2_Stream1_IRQHandler进入错误流程),但单独运行BLE模块时正常,表明问题可能源于原有线程与BLE模块的交互冲突。以下是逐步排查与解决方案: 一、问题根源…...

NoSQL——Redis配置与优化
目录 关系型&非关系型数据库 一、核心原理对比 二、核心特性对比 三、关键区别剖析 四、典型产品示例 总结 Redis Redis核心原理 核心特性 技术意义 配置文件解析 1. 基础配置 2. 持久化配置 3. 内存管理 4. 高可用配置 5. 性能调优 6.…...
Kafka 消息模式实战:从简单队列到流处理(一)
一、Kafka 简介 ** Kafka 是一种分布式的、基于发布 / 订阅的消息系统,由 LinkedIn 公司开发,并于 2011 年开源,后来成为 Apache 基金会的顶级项目。它最初的设计目标是处理 LinkedIn 公司的海量数据,如用户活动跟踪、消息传递和…...