第1章 认识Flask

news2024/11/18 7:39:14

学习目标

  • 了解Flask框架,能够说出Flask框架的发展史以及特点

  • 熟悉隔离Python环境的创建方式,能够独立在计算机上创建隔离的Python环境

  • 掌握Flask的安装方式,能够独立在计算机上安装Flask框架

  • 掌握PyCharm配置隔离环境的方式,能够独立在PyCharm工具中配置隔离环境

  • 掌握Flask程序的基本结构,能够归纳Flask类、路由、视图函数和开发服务器的作用

  • 熟悉配置项,能够列举至少5个Flask配置项的作用

  • 掌握配置信息的使用,能够通过访问字典元素、导入文件和导入对象这3种方式

  • 熟悉Flask扩展包,能够列举至少3个Flask扩展包的用途

Web应用程序发展至今涵盖的技术持续扩大,这在一定程度上给Web应用程序的开发者增加了开发难度。为了提高开发者编写Web应用程序的效率,Python引入了一些成熟的Web应用程序框架,开发者只需要按照框架的约定,在指定位置编写核心业务的逻辑代码即可。 Flask作为目前比较流行的Web应用程序框架,自发布以来备受好评,在Web开发领域占据一席之地。本章将围绕着Flask框架的入门知识进行讲解,使读者对Flask框架建立初步的认识。

1.1 Flask简介

Flask是一个用Python编写的微框架,它可以帮助开发者在短时间内完成一个功能丰富的Web应用程序。微框架并不意味着将Web应用程序的所有代码放置在一个py文件中,而是意味着代码简洁且易于扩展。 Flask默认依赖两个外部库:Werkzeug WSGI工具包和Jinja2模板引擎,它只保留了Web开发的核心功能,而不包括用户认证、表单验证、发送邮件等其他Web应用程序框架通常包含的功能。开发者若需要给Flask程序添加额外的功能,可以在Flask官网找到相应的扩展包进行开发。

Flask之所以如此受欢迎,离不开其自身具备的几个特点。

1.内置开发服务器和调试器

Flask自带开发服务器,它可以让开发者在调试Web应用程序时无须安装其他的网络服务器,比如Tomcat、JBoss、Apache等,为程序正式投入运行提供了一定的保障。另外,基于Flask开发的程序默认处于调试状态,当程序运行出现异常时,Flask程序会同时向启动Python程序的控制台和HTTP客户端发送错误信息。

2.使用Jinja2模板

Flask使用Jinja2模板引擎将HTML页面与应用程序联系起来。Jinja2是一个灵活的模板引擎技术,它由Django模板引擎发展而来,但比Django模板引擎更加高效。Jinja2模板引擎使用配制的语义系统,它不仅提供了灵活的模板继承技术,还可以自动防止XSS跨站攻击。

3.极强的定制型

Flask社区提供了功能丰富的扩展包,让程序在保持核心功能简单的同时实现功能的丰富与扩展。开发者可以根据自己的需求添加扩展包,也可以自行开发扩展包,借助扩展包来快速开发一个功能丰富的网站,并实现对网站的个性化定制。

4.基于Unicode编码

Flask完全基于Unicode编码格式,这对制作非纯ASCII字符集的网站而言非常方便。由于HTTP协议支持传输任何编码格式,但该协议要求每次传输时要在请求头中显式指定使用的编码格式,Flask程序默认会为请求头指定UTF-8编码,使开发者无须再担心编码问题。

5.完全兼容WSGI 1.0标准

WSGI(Web服务器网关接口)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口,它制定了一套通信标准,保证Web服务器可以跟Web应用程序之间相互通信。Flask程序完全兼容WSGI,它能够运行到任何Web服务器。

6.无缝衔接单元测试

Flask提供了一个与Python自带的单元测试框架unittest无缝衔接的测试接口,即Flask对象的test_client()函数,通过该函数测试程序可以模拟HTTP访问客户端,调用Flask路由绑定的视图函数,并且获取视图函数的返回值进行自定义的验证。

1.2 搭建Flask开发环境

1.2.1 创建虚拟的Python环境

在实际开发Flask程序时,程序的不同版本可能会依赖不同的环境,这时需要在系统中安装多个版本的Python解释器或依赖包,如果直接在物理环境中进行配置,那么多个版本的Python解释器之间可能会产生干扰。为了解决这个问题,我们需要使用virtualenv工具创建虚拟环境,以隔离不同版本的Python解释器。

在使用virtualenv工具之前,我们需要先在计算机中安装virtualenv工具。virtualenv工具可通过pip命令在线安装,具体命令如下所示。

pip install virtualenv

一台计算机中可以创建多个虚拟环境,我们可以将不同版本的Python解释器安装到不同的虚拟环境中。

1.创建虚拟环境

创建虚拟环境的命令格式如下所示。

virtualenv 虚拟环境名
virtualenv –p Python解释器的路径 虚拟环境名

若通过第1个命令创建虚拟环境,则虚拟环境中使用的Python版本是由系统环境变量设置的Python解释器决定的;若通过第2个命令创建虚拟环境,则虚拟环境中使用的Python版本是由用户显式指定的Python解释器决定的。

例如,在E:\env_space目录下通过第1个命令创建虚拟环境flask_env,具体命令如下所示。

E:\env_space>virtualenv flask_env

2.使用虚拟环境

若希望使用虚拟环境,需要执行虚拟环境目录Scripts下的activate文件。例如,使用刚刚创建的虚拟环境flask_env,具体命令如下所示。

E:\env_space>.\flask_env\Scripts\activate

上述命令执行后,会工作在虚拟环境flask_env下,并在提示符前面显示虚拟环境的名称flask_env,具体如下所示。

(flask_env) E:\env_space>

3.退出虚拟环境

使用deactivate命令可以退出当前工作的虚拟环境。例如,使用deactivate命令退出虚拟环境flask_env,具体命令如下所示。

(flask_env) E:\env_space>deactivate
E:\env_space>

多学一招:requirement.txt

不同的Flask项目可能会依赖不同的虚拟环境,若要在新计算机中运行项目,就需要重复为该项目配置一套相同的虚拟环境,为了区分和记录每个项目的依赖包及其版本,以便在新计算机中复现项目的虚拟环境,我们可以通过一个requirement.txt文件记录项目的所有依赖包及其版本号,以便在新计算机中实现一键安装的效果。 需要说明的是,requirement.txt文件的名称是开发者之间约定俗成的,也可以进行重新命名。

requirement.txt文件的使用一般分为以下两步。

(1)通过pip命令将虚拟环境依赖的扩展包及其版本号记录到requirement.txt文件中,具体命令如下所示。

pip freeze > requirements.txt

(2)在新计算机中,通过pip命令根据requirement.txt文件记录的依赖包及其版本号安装相应版本的依赖包,具体命令如下所示。

pip install -r requirements.txt

1.2.2 安装Flask

若我们要开发Flask项目,还需要在虚拟环境中安装Flask。Flask是由Python编写的框架,也可以直接通过pip命令进行安装。例如,在虚拟环境flask_env中使用pip命令安装Flask 2.0.2,具体命令如下所示。

(flask_env) E:\env_space>pip install flask 

Flask安装了6个依赖包,分别是Jinja2、MarkupSafe、Werkzeug、click、colorama和itsdangerous。

依赖包版本说明
Jinja23.0.2模板渲染引擎
MarkupSafe2.0.1HTML字符转义工具
Werkzeug2.0.2WSGI工具集,它封装了Web框架中的很多内容,包含请求、响应、WSGI开发服务器、调试器和重载器
click8.0.1命令行工具
colorama0.4.4命令行彩色显示工具
itsdangerous2.0.1提供各种加密签名功能

为了验证Flask包是否安装成功,我们可以在命令行窗口中输入“python”进入Python解释器,并在Python解释器中尝试导入Flask,具体如下所示。

(flask_env) E:\env_space>python
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import flask

执行导入flask库的指令后,没有产生任何的错误信息,说明安装成功了。

1.2.3 安装PyCharm

PyCharm是一款较多开发者使用的集成开发环境,它具有调试、语法高亮、Project管理、代码跳转、智能提示、单元测试、版本控制等功能,可以实现程序编写、运行、测试一体化。

打开浏览器,访问PyCharm官网的下载页面。

Professional是专业版本,该版本支持Django、Flask、远程开发、数据库和SQL语句等更多的高级功能,且需要用户付费购买。 Community是社区版本,该版本属于轻量级的Python开发工具,且是免费的。

该安装步骤过程在python程序设计课程中已经介绍过了,这里不再赘述。

1.2.4 在PyCharm中配置虚拟环境

若要使用PyCharm工具开发Flask程序,既可以另行创建新的虚拟环境,也可以使用创建好的虚拟环境进行开发。接下来,在PyCharm工具中新建一个项目,并为该项目配置虚拟环境flask_env。

首次打开PyCharm工具时会进入Welcome to PyCharm界面。

单击Welcome to PyCharm界面中的“Create New Project”按钮进入New Project界面。

Location文本框用于填写项目的路径及名称,默认名称为untitled; Project Interpreter用于选择Python解释器,它包含New environment using和Existing interpreter两个选项,其中New environment using代表新创建的环境,Existing interpreter代表已经存在的Python解释器。

将项目的名称由untitled修改为first_pro,单击标注的 按钮弹出Add Python Interpreter窗口。

Virtualenv Environment表示添加虚拟环境中的Python解释器,Conda Environment表示添加Conda环境中的Python解释器,System Interpreter表示添加本地的Python解释器。

单击Add Python Interpreter窗口中标注的 按钮,弹出Select Python Interpreter窗口,在该窗口中选择虚拟环境flask_env中的python.exe。

单击Select Python Interpreter窗口中的“OK”按钮,关闭Select Python Interpreter窗口,跳转回Add Python Interpreter窗口,在Add Python Interpreter窗口中单击“OK”按钮,关闭Add Python Interpreter窗口并跳转回New Project界面,此时New Project界面中显示了选择的Python解释器。

单击New Project界面中的“Create”按钮,进入first_pro项目的主界面。

1.3 开发第一个Flask程序

1.3.1 编写Hello Flask程序

在first_pro项目中创建一个名称app的py文件,并在该文件中编写Hello Flask程序的代码,具体代码如下所示。

# 导入Flask类
from flask import Flask
#实例化Flask类
app=Flask(__name__)
# 定义视图函数,并为该函数注册路由
@app.route("/")
def hello_flask():
    return "<p>Hello,Flask!</p>"
if __name__ == "__main__":
    # 启动开发服务器
    app.run()

在浏览器的地址栏中输入http://127.0.0.1:5000/,按下回车键后看到的页面效果如下图所示。

1.3.2 程序的基本结构

Hello Flask程序包含3个比较重要的部分,分别是Flask类、开发服务器、路由与视图。

1.Flask类

Flask类是flask包中的核心类,该类中封装了很多与Flask程序相关的方法,通过这些方法可以轻松地对Flask程序进行相应的操作。所有的Flask程序中必须要创建一个Flask类的对象,创建Flask类对象的方式非常简单,只需要调用构造方法即可。

在Hello Flask程序中,创建Flask类对象的代码如下所示创建Flask类对象的代码如下所示。

app = Flask(__name__)

上述代码中,构造方法中传入了一个必选参数namename是Flask中一个特殊的变量,用于保存程序主模块或者包的名称。除了必选参数外,构造方法中还可以根据需要传入以下几个可选参数。

static_folder:用于指定存放静态文件的文件夹名称,默认值为static。 static_url_path:用于指定前端访问静态文件的路径,默认值为static_folder的名称。 template_folder:用于指定存放模板文件的文件夹名称,默认为应用程序根路径下的templates文件夹。

2.开发服务器

Flask的依赖包Werkzeug提供了一个简易的开发服务器,供开发人员在开发和测试阶段运行程序,可以暂时不配置生产服务器(如Apache)。Flask程序创建成功以后,便可以启用开发服务器测试程序是否有效。 使用开发服务器有两种方式,一种方式是通过命令行使用开发服务器,另一种方式是通过代码使用开发服务器,即调用Flask类的对象的run()方法。

app.run()

host:运行当前程序的主机名称,默认值为'127.0.0.1'或'localhost'。 port:运行当前程序的主机对应的端口号,默认值为5000。 debug:是否启用调试模式,默认值为False。

3.路由与视图

路由是一种目前主流的Web框架中应用的技术,用于帮助用户直接根据URL访问某个页面,而无须再从主页导航到这个页面。当初始化Flask类对象时,会注册程序中所有的URL规则,一旦用户在浏览器发送访问某个页面的URL请求后,服务器便会将该URL请求交给Flask程序,这时Flask程序会根据URL规则找到与之关联的视图。

在Flask中,视图是Python函数或Python类,用于对浏览器发送的请求进行处理,并返回响应内容给Web服务器。视图返回的响应内容既可以是一个包含HTML代码的字符串,也可以表单等。

例如,在Hello Flask程序中,定义视图函数及URL规则的代码如下所示。

@app.route("/")
def hello_flask():
    return "<p>Hello, Flask!</p>"

1.4 Flask程序配置

1.4.1 常用配置项介绍

在开发Flask程序的过程中,根据不同的应用环境需要不同的配置,比如开关调试模式、密钥以及其他依赖于环境的内容,经常会将常用的属性存储在系统配置文件中,这样可以提高程序的复用性。 Flask内置了众多配置项,这些配置项都是大写形式的变量,开发人员可以通过设置这些配置项来定制程序的一些行为。

配置项说明
ENV指定应用运行的环境,默认值为'production'
DEBUG启用/禁用调试模式。当ENV的值为'development'时, DEBUG的默认值为True,否则为False
TESTING启用/禁用测试模式,默认值为False
PROPAGATE_EXCEPTIONS显式启用/禁用异常的传播。在PROPAGATE_EXCEPTIONS未设置的情况下,若TESTING 或 DEBUG 为True,则该配置项隐式设为True
PRESERVE_CONTEXT_ON_EXCEPTION当一个异常发生时,不会弹出请求上下文,默认值为None
TRAP_HTTP_EXCEPTIONS若没有处理HTTPException异常的处理器,是否重新引发该异常被交互调试器处理,而并非将HTTPException作为一个简单错误响应进行返回,默认值为False
TRAP_BAD_REQUEST_ERRORS尝试操作一个请求字典中不存在的键,会返回一个400页面
配置项说明
SECRET_KEY表示密钥,用于安全签署会话Cookie,也可用于应用或扩展的其他安全需求,它的值是一个长的随机字符串
SESSION_COOKIE_NAME会话Cookie的名称,默认值为'session'
SESSION_COOKIE_DOMAIN会话Cookie会生效的域匹配规则
SESSION_COOKIE_PATH会话Cookie的路径
SESSION_COOKIE_HTTPONLY控制Cookie是否被设为HTTP only标志,默认值为True
SESSION_COOKIE_SECURE控制Cookie是否被设为secure标志,默认值为True
SESSION_COOKIE_SAMESITE限制外部站点的请求如何发送 cookie,默认值为None,可以被设置为'Lax'(推荐)或者'Strict'
配置项说明
PERMANENT_SESSION_LIFETIME控制长期会话的生命周期,默认值为timedelta(days=31),即 2678400 秒
SESSION_REFRESH_EACH_REQUEST当 session.permanent 为True时,控制每个响应是否都发送Cookie,默认值为True
USE_X_SENDFILE启用/禁用X-Sendfile,默认值为False。有些网络服务器, 如 Apache ,会启动X-Sendfile,以便更有效地提供数据服务。本配置项仅在使用这种服务时才有意义
SEND_FILE_MAX_AGE_DEFAULT默认缓存控制的最大期限,以秒为单位,默认值为43200(12小时)秒
SERVER_NAME设置应用绑定的主机和端口
APPLICATION_ROOT应用的根路径,默认值为'/'
PREFERRED_URL_SCHEME当没有请求上下文时使用预案生成外部URL,默认值为'http'
配置项说明
MAX_CONTENT_LENGTH设置请求数据中读取的最大字节数,默认值为None。若该配置项并未配置,且也未指定 CONTENT_LENGTH,为了安全将不会读取任何数据
JSON_AS_ASCII是否采用ASCII编码序列化对象,默认值为 True。若该配置项的值设为False,则Flask会按Unicode编码输出
JSON_SORT_KEYS是否按照字母顺序对JSON对象的键进行排序,默认值为True,这对于缓存来说是非常有用的
JSONIFY_PRETTYPRINT_REGULAR控制jsonify 响应是否输出新行、空格和缩进等排版格式的内容,以便于阅读,默认值为False。该配置项在调试模式下总是启用
JSONIFY_MIMETYPEjsonify 响应的媒体类型,默认值为'application/json'
TEMPLATES_AUTO_RELOAD模板更新时自动重载
EXPLAIN_TEMPLATE_LOADING是否记录模板文件如何载入调试信息,默认值为False
MAX_COOKIE_SIZE设置Cookie的最大字节数,默认值为 4093。若该配置项的值小于Cookie的字节数,则发出警告;若该配置项的值为0,则关闭警告

1.4.2 配置信息的使用

在Flask中,若需要在程序中使用配置信息,以便对程序的一些行为进行定制,则可以采用多种方式将配置信息保存到Flask类对象的config属性中。config属性的值是一个flask.Config类的对象,flask.Config类是一个Python字典子类,它的工作方式类似于字典,既可以通过访问字典元素的方式使用配置信息,也可以通过flask.Config类提供的导入配置项的方法使用配置信息。

1.通过访问字典元素的方式使用配置文件

可以通过访问字典元素的方式获取Flask程序的配置项,并重新为该配置项赋值。例如,通过为Flask类的对象app设置配置项TESTING,以启用测试模式,代码如下所示。

app.config['TESTING'] = True

若希望一次修改多个配置项,则可以调用flask.Config从父类继承的update()方法实现。例如,通过为Flask类的对象app设置配置项TESTING和SECRET_KEY,从而为程序启用测试模式以及设置密钥,具体代码如下所示。

app.config.update(
TESTING=True, 
SECRET_KEY=b'_5#y2L"F4Q8z\n\xec]/'
)

2.通过导入文件的方式使用配置文件

可以将所有的配置项存入单独的文件中,之后将该文件导入到Flask程序中。flask.Config类中提供了一些从文件中导入配置项的方法,关于这些方法的介绍如下。

from_file():从指定的文件中导入配置项,并更新配置项的值。 from_pyfile():从py文件中导入配置项,并更新配置项的值。

# 通过from_file()方法从config.json文件中导入配置项
import json
app.config.from_file("config.json", load=json.load)
# 通过from_pyfile()方法从config.py文件中导入配置项
app.config.from_pyfile("config.py")

3.通过导入对象的方式使用配置信息

可以通过定义Python类属性的方式设置配置项,之后将包含配置项的Python类或Python类实例化的对象导入到Flask程序中。flask.Config类中提供了一些从Python类中导入配置项的方法from_object(),from_object()方法用于从给定对象中导入配置项,并更新配置项的值。 需要说明的是,from_object()方法只会加载Python类中以大写字母命名的属性。如果Python类中有一个@property属性,则该类在被传递给from_object()方法之前需要进行实例化。

定义一个包含两个配置项TESTING和SECRET_KEY的类Settings,之后调用from_object()方法从Settings类中加载配置项,并在程序中使用这些配置信息,具体代码如下所示。

class Settings:
    # 启用测试模式
    TESTING=True
    # 设置密钥
    SECRET_KEY=b'_5#y2L"F4Q8z\n\xec]/'
app.config.from_object(Settings)

1.5 Flask扩展包

Flask自身并没有提供一些重要的功能模块,比如发送电子邮件、用户认证、数据库操作等,开发人员在实际开发中若需要完成这些功能,既可以使用Flask为应用增加的扩展包,也可以按照自己的需求自行开发扩展包,这样做不仅能够避免程序代码变得臃肿且复杂,而且提高了程序的可扩展性。

常用的Flask扩展包如下表所示。

扩展包说明
Flask-SQLalchemy操作数据库
Flask-migrate管理迁移数据库
Flask-Mail邮件
Flask-WTF表单
Flask-Bable提供国际化和本地支持
Flask-script插入脚本
Flask-Login认证用户状态
Flask-OpenID认证
Flask-RESEful开发REST API 工具
Flask-Bootstrap集成前端Twitter Bootstrap框架
Flask-Moment本地化日期和时间
Flask-Admin简单和可扩展的管理接口框架

Flask程序若希望使用某个扩展包,则需要先在当前工作环境中使用pip命令安装该扩展包。以安装扩展包Flask-SQLalchemy为例,具体安装命令如下所示。

pip install flask-sqlalchemy

扩展包Flask-SQLalchemy安装成功之后,便可以被应用引入到程序中。扩展包有着一定编写约定,它内部一般会提供一个扩展类,只要在创建扩展类对象时传入程序实例即可完成初始化过程。

以扩展包Flask-SQLalchemy提供的扩展类SQLAlchemy为例,创建SQLAlchemy对象的示例代码如下所示。

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
# 实例化Flask类
app = Flask(__name__)
# 实例化SQLAlchemy类
db = SQLAlchemy(app)

需要注意的是,尽管扩展包可以快速实现某些功能,不过有些扩展包可能会存在一些潜在的Bug,不同的扩展包之间甚至可能会出现冲突。因此我们在选择扩展包时,应该尽量从实际需求的角度出发,对扩展包的质量和兼容性多做考量,以保证效率与灵活性之间的平衡。

1.6 本章小结

本章作为本书的开篇章节,主要讲解了Flask框架的相关知识,包括Flask简介、搭建Flask开发环境、开发第一个Flask Web程序、Flask程序配置和Flask扩展包。通过学习本章的内容,希望读者能够对Flask框架建立初步的认识,为后续深入学习Flask框架做好准备工作。

1.7 习题

一,填空题

1.Flask默认以来Werkzeug工具包和()模板引擎。

2.使用()命令可以推出通过virtualenv创建的虚拟环境。

3.Flask是一个用()语言编写的微框架。

4.Flask的开发服务器默认使用的端口号为()。

5.Flask通过设置()定制程序的一些行为。

二,判断题

1.Flask自带开发服务器。()

2.Flask的依赖包Werkzeug提供了一个简易的开发服务器。()

3.Flask中的视图是Python函数或类。()

4.Flask完全兼容WSGI1.0标准。()

5.Flask的开发服务器只能通过命令行方式启动。()

三,选择题

1.下列选项中,哪个参数用于指定运行Flask程序的主机端口号?()

A.host

B.port

C.dubug

D.portal

2.下列选项中,用于在创建Flask类对象时指定模板文件存放目录的参数是()。

A.static_url_path

B.static_folder

C.template_folder

D.static_host

3.下列选项中,表示启用/禁用调式模式的配置项是()。

A.ENV

B.DEBUG

C.TESTING

D.SECRET_KEY

4.下列选项中,用于操作数据库的扩展包是()。

A.Flask-SQLAlchemy

B.Flask-Migrate

C.Flask-Mail

D.Flask-WTF

5.下列选项中,关于Flask的描述错误的是()。

A.Flask是一个由Python语言编写的微框架

B.Flask默认使用Django模板引擎将HTML页面与应用程序联系起来

C.Flask完全基于Unicode编码格式

D.Flask自带开发服务器,可以让开发者在调试Web应用程序时无须安装其他的网络服务器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1438075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑文件误删除怎么办?8个恢复软件解决电脑磁盘数据可能的误删

您是否刚刚发现您的电脑磁盘数据丢失了&#xff1f;不要绝望&#xff01;无论分区是否损坏、意外格式化或配置错误&#xff0c;存储在其上的文件都不一定会丢失到数字深渊。 我们已经卷起袖子&#xff0c;深入研究电脑分区恢复软件的广阔领域&#xff0c;为您带来一系列最有效…

如何在 emacs 上开始使用 Tree-Sitter (archlinux)

文章目录 如何在emacs上开始使用Tree-Sitter&#xff08;archlinux&#xff09; 如何在emacs上开始使用Tree-Sitter&#xff08;archlinux&#xff09; 在archlinux上使用比windows上不知道要方便多少倍&#xff01; $ sudo pacman -S emacs $ sudo pacman -S tree-sitter这里…

国内首个openEuler师训营圆满结营! 麒麟信安助力培养国产操作系统高质量师资人才

2024年1月22日&#xff0c;全国首个openEuler师训营圆满结营&#xff01;旨在深化产教融合&#xff0c;加速开源教育走进高校&#xff0c;提高师资队伍openEuler专业能力及实践教学水平。 本次师训营由长沙市大数据产业链、长沙市新一代自主安全计算系统产业链指导&#xff0c…

RxJava Subject

目录 AsyncSubjectBehaviorSubjectPublishSubjectReplaySubjectSerializedSubjectUnicastSubject 在Rxjava中&#xff0c; Subject可以同时表示Observer和Observable, 允许从单个源到多个子观察者multiple child Observers。 除了 onSubscribe(io.reactivex.disposables.Dispos…

云计算运维1

1、企业服务器LNMP环境搭建 集群&#xff1a;多台服务器在一起作同样的事 。分布式 &#xff1a;多台服务器在一起作不同的事 。 环境准备&#xff1a; 1、设置静态ip&#xff08;NAT模式网关为.2&#xff09; # cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE"E…

【C生万物】C语言分支和循环语句

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

uniapp /微信小程序 使用map组件实现手绘地图方案

获取地图范围 点图拾取坐标-地图开放平台|腾讯位置服务 获取需要手绘地图左下角和右上角GPS坐标 以北京故宫为例&#xff1a; 截取需要手绘地图进行手绘地图制作 ​​​​​​​​​​​​​​ 素材处理 由于地图素材文件比较大&#xff0c;小程序又限制包大小<2M,无…

51单片机基础:定时器

1.定时器介绍 51单片机通常有两个定时器&#xff1a;定时器 0/1&#xff0c;好一点的可能有定时器3。 在介绍定时器之前我们先科普下几个知识&#xff1a; 1&#xff0c;CPU 时序的有关知识 ①振荡周期&#xff1a;为单片机提供定时信号的振荡源的周期&#xff08;晶振周期或…

RAPTOR:树组织检索的递归抽象处理

RAPTOR: RECURSIVE ABSTRACTIVE PROCESSING FOR TREE-ORGANIZED RETRIEVAL Title&#xff1a;树组织检索的递归抽象处理 https://arxiv.org/pdf/2401.18059.pdf 摘要 检索增强语言模型可以更好的融入长尾问题&#xff0c;但是现有的方法只检索短的连续块&#xff0c;限制了整…

深度测评:ONLYOFFICE 桌面编辑器 v8.0新功能

目录 前言 一、PDF表单处理&#xff1a;提升办公效率 二、RTL&#xff08;从右到左&#xff09;支持&#xff1a;满足不同语言习惯 三、Moodle集成&#xff1a;教育行业的新助力 四、本地界面主题&#xff1a;个性化办公体验 五、性能优化与稳定性提升 六、性能与稳定性…

Ubuntu Linux使用PL2302串口和minicom进行开发板调试

调试远程的服务器上面的BMC&#xff0c;服务器上面安装了Ubuntu&#xff0c;想着可以在服务器接个串口到BMC&#xff0c;然后SSH到服务器的Ubuntu&#xff0c;用minicom来查看串口信息。 准备&#xff1a; 服务器Ubuntu安装mimicom 本机可以ssh到Ubuntu 串口工具PL2302 或者CH3…

React+Antd+tree实现树多选功能(选中项受控+支持模糊检索)

1、先上效果 树型控件&#xff0c;选中项形成一棵新的树&#xff0c;若父选中&#xff0c;子自动选中&#xff0c;子取消&#xff0c;父不取消&#xff0c;子选中&#xff0c;所有的父节点自动取消。同时支持模糊检索&#xff0c;会检索出所有包含该内容的关联节点。 2、环境准…

【iOS ARKit】人形遮挡

人形遮挡简介 在 AR系统中&#xff0c;计算机通过对设备摄像头采集的图像进行视觉处理和组织&#xff0c;建立起实景空间&#xff0c;然后将生成的虚拟对象依据几何一致性原理嵌入到实景空间中&#xff0c;形成虚实融合的增强现实环境&#xff0c;再输出到显示系统中呈现给使用…

6.electron之上下文隔离,预加载JS脚本

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

白嫖10款游戏加速器,一年都不用开会员!

过年期间你们是走亲串戚还是窝家玩游戏、追剧&#xff1f;相信很多小伙伴都不会放过这个难得的假期&#xff0c;肯定是会百忙之中来两把的&#xff0c;那么人一多玩游戏肯定就会拥堵&#xff0c;有延迟。解决延迟最好的办法就是用加速器&#xff0c;当你的网络比别人强时&#…

Rust通用代码生成器莲花发布红莲尝鲜版二十一,前端代码生成物有巨大改进

Rust通用代码生成器莲花发布红莲尝鲜版二十一&#xff0c;前端代码生成物有巨大改进 Rust通用代码生成器莲花已发布红莲尝鲜版二十一&#xff0c;此版本采用了新的前端代码生成引擎&#xff1a;时空之门前端代码生成器6.2.0。此引擎支持Nodejs 21,Nodejs 18和Nodejs 14。消除了…

开源软件:技术创新与应用的推动力量

文章目录 每日一句正能量前言开源软件如何推动技术创新开源软件的历史开源软件的开发模式开源软件与闭源软件源代码和开发许可维护特点、支持和成本开源软件的优势减少开支可定制性快速创新发展透明度和安全性 开源软件的应用 常见问题后记 每日一句正能量 不好等待运气降临&am…

如何检测机械硬盘和固态硬盘的健康状况?

机械硬盘、移动硬盘、固态硬盘等作为存储数据的重要部件&#xff0c;其重要性不言而喻。随着时间的推移&#xff0c;这些数据存储设备可能会出现各种问题&#xff0c;影响数据安全。机械硬盘、固态硬盘的健康状态怎么看&#xff1f;本篇介绍两个方法帮你检测电脑上的机械硬盘或…

大数据Doris(六十四):Doris on ES在快手商业化的业务场景介绍

文章目录 Doris on ES在快手商业化的业务场景介绍 一、服务介绍

kafka 文件存储机制

文章目录 1. 思考四个问题&#xff1a;1.1 topic中partition存储分布&#xff1a;1.2 partiton中文件存储方式&#xff1a;1.3 partiton中segment文件存储结构&#xff1a;1.4 在partition中如何通过offset查找message: 2. kafka日志存储参数配置 Topic是逻辑上的概念&#xff…