学习 Python 之 Pygame 开发魂斗罗(一)
学习 Python 之 Pygame 开发魂斗罗(一)
- Pygame
- 回忆Pygame
- 1. 使用pygame创建窗口
- 2. 设置窗口背景颜色
- 3. 获取窗口中的事件
- 4. 在窗口中展示图片
- (1). pygame中的直角坐标系
- (2). 展示图片
- (3). 给部分区域设置颜色
- 5. 在窗口中显示文字
- 6. 播放音乐
- 7. 图片翻转与缩放
- 8. 设置游戏帧率
Pygame
回忆Pygame
在之前的学习中,咱们使用Pygame开发出了坦克大战,这次再使用Pygame开发魂斗罗,如果有想学习开发坦克大战的小伙伴,可以看看下面的博客
学习 Python 之 Pygame 开坦克大战(一)
学习 Python 之 Pygame 开坦克大战(二)
学习 Python 之 Pygame 开坦克大战(三)
学习 Python 之 Pygame 开坦克大战(四)
学习 Python 之 Pygame 开坦克大战(五)
下面再回顾一下Pygame创建窗口、播放音乐等操作
Pygame的官方文档
| 函数名称 | 作用 | 返回值 |
|---|---|---|
| pygame.display.init() | 初始化展示模块 | None |
| pygame.display.set_mode(size = (0, 0)) | 初始化窗口(窗口就是一个Surface对象) | Surface |
| pygame.display.set_caption(title, icontitle = None) | 设置窗口标题和图标 | None |
| pygame.Surface.fill(color, rect = None) | 用纯色填充表面Surface对象 | None |
| pygame.Color(b, g, r) | 创建用于颜色表示的Pygame对象 | Color |
| pygame.display.update() | 更新屏幕 | None |
| pygame.event.get() | 获取事件队列 | Eventlist |
| pygame.image.load(filename) | 从文件加载图片(图片跟窗口一样,也是Surface对象) | Surface |
| pygame.Surface.get_rect() | 获取Surface对象的rect属性 | Rect |
| pygame.Surface.blit(source, dest, area = None) | 在一个Surface对象上显示另一个Surface对象 | Rect |
| pygame.font.init() | 初始化字体模块 | None |
| pygame.font.SysFont(name, size, bold = False, italic = False) | 从系统字体创建字体对象 | Font |
| pygame.font.render(text, antialias, color, background = None) | 创建一个带有指定字体的Surface对象 | Surface |
| pygame.mixer.init() | 初始化混合器模块 | None |
| pygame.mixer.Sound(filename) | 从文件创建声音对象 | Sound |
| pygame.mixer.Sound.play(loops = 0, maxtime = 0) | 播放音乐,loops参数控制播放次数,播放次数为loops + 1次。默认为0,表示声音不会重复,只播放一次。如果loops为-1,声音将无限循环 | Channel |
| pygame.mixer.Sound.stop() | 声音停止播放 | None |
| pygame.mixer.Sound.set_volume(value) | 设置音量 | None |
| pygame.transform.flip(surface, flip_x, flip_y) | 图片翻转 | Surface |
| pygame.transform.scale(surface, size) | 将图片(Surface对象)调整为大小为(width, height)的新图片 | Surface |
| pygame.time.Clock() | 用于帮助跟踪时间以及控制游戏帧速率的类 | Clock |
| pygame.time.Clock.tick(framerate = 0) | 设置游戏运行的帧率 | milliseconds |
| pygame.time.Clockget_fps() | 计算游戏的帧速率(以帧每秒为单位) | float |
1. 使用pygame创建窗口
import pygame# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Contra')
创建结果

窗口一闪而过
2. 设置窗口背景颜色
# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)# 更新窗口
pygame.display.update()
完整代码
import pygame
import time# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Tank Battle')# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)# 更新窗口
pygame.display.update()# 让程序休眠200秒,方便观察窗口的变化
time.sleep(200)

不要忘记更新窗口,否则不会显示颜色的
实际上,颜色可以不用使用 pygame.Color(blue, green, red) 来创建,直接使用元组的方式
WHITE = (255, 255, 255)
这样的方式传入
window.fill(WHITE)
也是可以生效的,为了方便直接用红绿蓝序列即可
3. 获取窗口中的事件
def getWindowEvent():for event in pygame.event.get():# 点击窗口右上角的关闭触发的事件if event.type == pygame.QUIT:sys.exit()# 鼠标按下事件elif event.type == pygame.MOUSEBUTTONDOWN:x, y = event.posprint('鼠标按下, 鼠标位置({x}, {y})'.format(x = x, y = y))# 鼠标抬起事件elif event.type == pygame.MOUSEBUTTONUP:print('鼠标抬起')# 键盘按键按下事件elif event.type == pygame.KEYDOWN:print('键盘按键按下')# 具体键盘事件触发if event.key == pygame.K_j:print('按下键盘 j 键')# 键盘按键抬起事件elif event.type == pygame.KEYUP:print('键盘按键抬起')
完整代码
import pygame
import sysdef getWindowEvent():for event in pygame.event.get():# 点击窗口右上角的关闭触发的事件if event.type == pygame.QUIT:sys.exit()# 鼠标按下事件elif event.type == pygame.MOUSEBUTTONDOWN:x, y = event.posprint('鼠标按下, 鼠标位置({x}, {y})'.format(x = x, y = y))# 鼠标抬起事件elif event.type == pygame.MOUSEBUTTONUP:print('鼠标抬起')# 键盘按键按下事件elif event.type == pygame.KEYDOWN:print('键盘按键按下')# 具体键盘事件触发if event.key == pygame.K_j:print('按下键盘 j 键')# 键盘按键抬起事件elif event.type == pygame.KEYUP:print('键盘按键抬起')# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Contra')# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)while 1:# 获取键盘事件getWindowEvent()# 更新窗口pygame.display.update()
运行后按下鼠标左键,键盘s键,键盘w键
结果
鼠标按下, 鼠标位置(355, 170)
鼠标抬起
键盘按键按下
键盘按键抬起
键盘按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
W按键按下
键盘按键抬起
系统的事件都具有一组成员属性。下面是事件类型及其特定属性的列表图(图片来源链接)

在 学习 Python 之 Pygame 开坦克大战(一)中,我们使用的是另一种形式,这两种差别不大,大家仔细对比一下
在上面的结果中,“W按键按下”打印的次数与窗口的帧率有关系,在下面我们会说到
4. 在窗口中展示图片
(1). pygame中的直角坐标系

(2). 展示图片
import pygame# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 1100
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Contra')# 设置图片路径
path = '../Image/Map/第一关BG.png'
# 加载图片
image = pygame.image.load(path)
# 获取直角坐标
rect = image.get_rect()
# 设置图片的位置,在(0,0)处加载图片
rect.left = 0
rect.top = 0
# 在窗口显示
window.blit(image, rect)while 1:# 更新窗口pygame.display.update()

(3). 给部分区域设置颜色
import pygame# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Contra')# 设置窗口背景颜色
blue = 255
green = 0
red = 255
BACKGROUND_COLOR = pygame.Color(blue, green, red)
window.fill(BACKGROUND_COLOR)# 给部分区域设置颜色
rect = pygame.Rect(200, 200, 200, 300)
REGION_COLOR = pygame.Color(50, 50, 150)
window.fill(REGION_COLOR, rect)while 1:# 更新窗口pygame.display.update()

5. 在窗口中显示文字
import pygame# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Contra')# 设置文字内容
text = 'Hello Pygame'# 初始化字体
pygame.font.init()
# 设置文字字体和大小
fontSize = 16
font = pygame.font.SysFont('georgia', fontSize)
# 加载文字并设置颜色
fontColor = pygame.Color(255, 255, 255)
fontObject = font.render(text, True, fontColor)
# 设置展示位置
position = (50, 50)
# 展示文字
window.blit(fontObject, position)while 1:# 更新窗口pygame.display.update()
运行结果

6. 播放音乐
import pygame# 初始化混合器模块
pygame.mixer.init()
# 加载音乐
sound = pygame.mixer.Sound('./star.wav')
# 播放音乐
sound.play()
7. 图片翻转与缩放
import time
import pygamedef enlarge(image: pygame.Surface, scale):"""缩放图片:param image: 要缩放的图片:param scale: 图片缩放尺寸:return: 缩放后的图片"""# 获取图片大小rect = image.get_rect()# 长宽扩大 scale 倍largeSize = (int(rect.width * scale), int(rect.height * scale))# 对图片缩放large = pygame.transform.scale(origin, largeSize)return largedef flip(image: pygame.Surface, h, v):"""图片翻转:param image: 要翻转的图片:param h: 是否水平翻转:param v: 是否上下翻转:return: 翻转后的图片"""return pygame.transform.flip(image, h, v)# 初始化展示模块
pygame.display.init()
# 设置窗口大小
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Contra')# 加载原图
origin = pygame.image.load('../Image/Map/第一关BG.png')
# 显示原图
rect = origin.get_rect()
rect.x = 0
rect.y = 0
window.blit(origin, rect)# 更新窗口
pygame.display.update()
time.sleep(2)# 图片缩放2.5倍
large = enlarge(origin, 2.5)
# 显示原图
rect = large.get_rect()
rect.x = 0
rect.y = 0
window.blit(large, rect)# 更新窗口
pygame.display.update()
time.sleep(2)# 图片翻转
img = flip(large, True, False)
# 显示原图
rect = img.get_rect()
rect.x = 0
rect.y = 0
window.blit(img, rect)# 更新窗口
pygame.display.update()
time.sleep(2)
先看看原图

放大2.5倍的图

翻转图片,这里是左右翻转,图片的最后是BOSS关,翻转过来就先显示BOSS关卡啦
水平翻转大家可以自己试一试

自己封装的图片缩放函数
def enlarge(image: pygame.Surface, scale):"""缩放图片:param image: 要缩放的图片:param scale: 图片缩放尺寸:return: 缩放后的图片"""# 获取图片大小rect = image.get_rect()# 长宽扩大 scale 倍largeSize = (int(rect.width * scale), int(rect.height * scale))# 对图片缩放large = pygame.transform.scale(origin, largeSize)return large
自己封装的图片翻转函数
def flip(image: pygame.Surface, h, v):"""图片翻转:param image: 要翻转的图片:param h: 是否水平翻转:param v: 是否上下翻转:return: 翻转后的图片"""return pygame.transform.flip(image, h, v)
8. 设置游戏帧率
创建一个对象来帮助跟踪时间,并设置帧率
clock = pygame.time.Clock()
fps = 60
在循环中设置帧率,并把帧率显示在标题上
while 1:# 设置帧率clock.tick(fps)r = clock.get_fps()caption = 'Contra - {:.2f}'.format(r)pygame.display.set_caption(caption)# 更新窗口pygame.display.update()
完整代码
import pygame# 初始化展示模块
pygame.display.init()# 设置窗口大小
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
size = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 初始化窗口
window = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption('Contra')clock = pygame.time.Clock()
fps = 60while 1:# 设置帧率clock.tick(fps)r = clock.get_fps()caption = 'Contra - {:.2f}'.format(r)pygame.display.set_caption(caption)# 更新窗口pygame.display.update()
看看结果,可以看到窗口上有帧率显示了,60表示 1秒窗口要刷新60次

相关文章:
学习 Python 之 Pygame 开发魂斗罗(一)
学习 Python 之 Pygame 开发魂斗罗(一)Pygame回忆Pygame1. 使用pygame创建窗口2. 设置窗口背景颜色3. 获取窗口中的事件4. 在窗口中展示图片(1). pygame中的直角坐标系(2). 展示图片(3). 给部分区域设置颜色5. 在窗口中显示文字6. 播放音乐7. 图片翻转与…...
ARM uboot 源码分析8 - uboot的环境变量
一、uboot 的环境变量基础 1、环境变量的作用 (1) 让我们可以不用修改 uboot 的源代码,而是通过修改环境变量,来影响 uboot 运行时的一些数据和特性。譬如说,通过修改 bootdelay 环境变量,就可以更改系统开机自动启动时倒数的秒…...
【蓝牙mesh】Network协议层介绍
【蓝牙mesh】Network协议层介绍 Network层简介 上一章节我们讲解了蓝牙Mesh中Lower层的功能和数据格式。 Lower层的数据往下传输就到了网络层(Network Layer)。网络层定义了收到Lower层的数据后,如何对其进行判断、封装、加密、认证…...
基于遗传算法的配电网故障定位(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...
Leetcode.1247 交换字符使得字符串相同
题目链接 Leetcode.1247 交换字符使得字符串相同 Rating : 1597 题目描述 有两个长度相同的字符串 s1和 s2,且它们其中 只含有 字符 "x"和 "y",你需要通过「交换字符」的方式使这两个字符串相同。 每次「交换字符」的时…...
python语音识别whisper
一、背景 最近想提取一些视频的字幕,语音文案,研究了一波 二、whisper语音识别 Whisper 是一种通用的语音识别模型。它在不同音频的大型数据集上进行训练,也是一个多任务模型,可以执行多语言语音识别以及语音翻译和语言识别。 …...
Prometheus -- 浅谈Exporter
Prometheus系统 – Exporter原理 为什么我们需要Exporter? 广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本…...
如何确定RocketMQ中消费者的线程大小
背景 随着物联网行业的发展、智能设备数量越来越多,随着设备活跃量过大,常常存在一些高并发的请求,形成了流量尖峰,过多的请求会压垮服务器,影响其他服务运行。因此,为了保护云端服务,需要对请求…...
OpenAPI SDK组件之Spring Aop源码拓展
Spring Aop 看这个分享的应该都用过Spring Aop,这里就不再过多介绍了它是什么了。 我抽取了Spring Aop的部分源码,通过它实现请求参数可变拦截,同时apisdk离开Spring框架,仍然可以正常运行。 讲拦截也好,通知也罢&a…...
蓝桥杯C/C++VIP试题每日一练之龟兔赛跑预测
💛作者主页:静Yu 🧡简介:CSDN全栈优质创作者、华为云享专家、阿里云社区博客专家,前端知识交流社区创建者 💛社区地址:前端知识交流社区 🧡博主的个人博客:静Yu的个人博客…...
为你的Vue2.x老项目安装Vite发动机吧
天下苦webpack久矣,相信作为前端开发者一定经历过在项目迭代时间较长的时候经历漫长等待的这一过程,每一次保存都会浪费掉大量时间,这是webpack这种机制所带来的问题。 于是,尤大为我们带来了新一代前端构建工具:vite…...
ZCMU--5012: 铺设道路(差分思路)
Description 春春是一名道路工程师,负责铺设一条长度为 n 的道路。 铺设道路的主要工作是填平下陷的地表。 整段道路可以看作是 n 块首尾相连的区域,一开始,第 i 块区域下陷的深度为 di。 春春每天可以选择一段连续区间 [L,R]&…...
算法模板总结(自用)
算法模板总结滑动窗口双指针算法数组相关合并两个有序数组左右指针技巧快慢指针技巧字符串相关左右指针反转字符串问题快慢指针替换空格字符问题链表相关快慢双指针删除链表的倒数第N个节点链表相交环形链表链表操作几数之和两数之和四个数组的四数之和三数之和同一数组中四数之…...
【架构师】零基础到精通——架构发展
博客昵称:架构师Cool 最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。 作者简介:一名Coder,软件设计师/鸿蒙高级工程师认证,在备战高级架构师/系统分析师,欢迎关注小弟! 博主小留言…...
C++(20):三路比较运算符
C20增加了三路比较运算符<>(戏称航天飞机运算符),用于对类的比较运算符进行统一的设计。有两种使用方式:默认比较对于某些类,如果按照其成员逐一比较即可决定比较运算符的值,那么可以使用默认的三路运…...
MySQL workbench 字符集、字符序的概念与联系
在数据的存储上,MySQL提供了不同的字符集支持。而在数据的对比操作上,则提供了不同的字符序支持。 MySQL提供了不同级别的设置,包括server级、database级、table级、column级,可以提供非常精准的设置。 什么是字符集、字符序&am…...
DBA之路---数据库启动与关闭过程
DBA之路—数据库启动与关闭过程 1、启动过程 oracle启动的四个状态 shutdown、就是数据库关闭状态。 nomount模式 #启动instance ,读取参数文件、分配sga空间启动后台进程,打开alter日志和其他trace文件startup nomount #该模式下只会创建实例并不加…...
Shell文件包含
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。 一、语法格式 Shell 文件包含的语法格式如下: . filename # 注意点号(.)和文件名中间有一空格 或 source filename 在当前bash环境下读取并执行file…...
计算机网络(六): HTTP,HTTPS,DNS,网页解析全过程
文章目录一、HTTP头部包含的信息通用头部请求头部响应头部实体头部二、Keep-Alive和非Keep-Alive的区别三、HTTP的方法四、HTTP和HTTPS建立连接的过程4.1 HTTP4.2 HTTPS五、HTTP和HTTPS的区别六、HTTPS的加密方式七、cookie和sessionsessioncookie八、HTTP状态码状态码200&…...
Android仿京东金融的数值滚动尺功能
自定义数值滚动尺,这个用的还是挺多的,例如京东金融的通过滚动尺选择金额等,而这次就是高仿京东金融的数值滚动尺。首先看看下效果图,如下:首先先给你们各个变量的含义,以免在后面的讲解中不知变量的意思,代码如下://最…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
Linux安全加固:从攻防视角构建系统免疫
Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...
