Django 模板分割及多语言支持案例【需求文档】-->【实现方案】
Django 模板分割及多语言支持案例
这个案例旨在提供一个清晰的示范,展示如何将复杂的页面分解为多个可复用的模板组件,使代码更加模块化和易于管理。希望这篇案例文章对你有所帮助。
概述
在 Django 项目开发中,使用模板分割和多语言支持能有效提升代码的可维护性和用户体验。本案例通过一个简单的博客项目,展示如何将 Django 模板拆分为多个文件,并实现多语言支持。
需求文档
-
背景
在开发Django项目时,将模板分割成多个文件并实现多语言支持是提高代码可维护性和用户体验的重要方法。本项目旨在展示如何使用Django模板进行模块化开发和多语言支持。通过一个简单的博客项目,我们将实现页面分割、文章列表显示及商品信息展示,并根据语言切换进行动态更新。 -
功能需求
2.1 基础模板
功能:存储页面的基础配置,提供页面结构和通用样式。
文件名:base.html
详细描述:
包含HTML头部信息。
提供通用的样式定义。
定义内容插入块 {% block content %},供其他页面继承和填充内容。
2.2 主页模板
功能:显示主页内容,包含语言切换选项和文章列表。
文件名:home.html
详细描述:
继承自 base.html。
定义页面标题块 {% block title %}。
显示当前语言。
提供语言切换下拉菜单。
插入文章列表模板 {% include “article_list.html” %}。
2.3 文章列表模板
功能:循环显示文章列表,根据当前语言显示相应的文章标题和概括。
文件名:article_list.html
详细描述:
使用 {% for %} 循环显示所有文章。
根据当前语言显示中文或英文文章标题及概括。
插入相应语言的商品列表模板 {% include “products_list_cn.html” %} 或 {% include “products_list_en.html” %}。
2.4 中文商品列表模板
功能:显示文章中的商品列表,最多显示5个商品。
文件名:products_list_cn.html
详细描述:
根据是否存在商品标题,动态插入商品部分模板 {% include “products_part_1_cn.html” %} 至 {% include “products_part_5_cn.html” %}。
2.5 商品部分模板
功能:显示具体的商品信息。
文件名:products_part_1_cn.html 至 products_part_5_cn.html
详细描述:
显示商品标题、概括和图片。
根据商品信息动态生成页面内容。
- 界面展示
3.1 主页
当前语言:显示当前选择的语言。
语言切换:提供语言选择下拉菜单,用户可切换语言。
文章列表:根据选择的语言显示对应的文章标题和概括。
商品列表:根据文章显示对应的商品列表和详细信息。
3.2 文章与商品展示
文章标题:根据语言显示中文或英文标题。
文章概括:显示文章的简短概括,并根据语言切换。
商品信息:根据语言动态显示商品标题、概括和图片。
- 业务逻辑
4.1 模板继承
home.html 继承自 base.html,提供页面的基础结构和通用样式。
使用 {% block title %} 和 {% block content %} 定义可插入内容。
4.2 语言切换
在 home.html 中提供语言切换下拉菜单,并通过 JavaScript 实现页面语言切换。
根据选择的语言参数 current_language 动态加载文章和商品内容。
4.3 文章与商品显示
使用 {% for article in articles %} 循环遍历所有文章。
根据 current_language 判断显示中文或英文的文章标题和概括。
根据文章中的商品信息,动态加载相应的商品部分模板。
- 总结
通过本需求文档,我们详细描述了Django项目中模板分割与多语言支持的实现方法。项目包含基础模板、主页模板、文章列表模板和商品部分模板,并通过语言切换动态加载对应内容,提升了代码的可维护性和用户体验。
具体实现
基础模板:base.html
基础模板 base.html 用于存储页面的基础配置,并可被其他页面继承和调用。它包含了 HTML 头部信息和页面主体结构:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>{% block title %}主页{% endblock %}</title><!-- Google Fonts --><link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet" /><!-- Tailwind CSS CDN --><script src="https://cdn.tailwindcss.com"></script><style>body {font-family: 'Roboto', sans-serif;}.hover-arrow::after {content: '>';color: #a0aec0;right: 0px;position: absolute;font-weight: bold;font-size: 24px;width: 25px;height: 36px;top: 25px;}</style>
</head>
<body class="bg-gray-900 text-white"><div class="max-w-3xl mx-auto py-8 px-4">{% block content %}{% endblock %}</div>
</body>
</html>
主页模板:home.html
主页模板 home.html 继承自 base.html,并包含页面标题、语言切换选项和文章列表:
{% extends "base.html" %}{% block title %}主页{% endblock %}{% block content %}<div class="mb-4"><span class="text-white text-xl font-bold">当前语言: {{ current_language }}</span></div><div class="mb-4"><label for="language-select" class="text-white text-xl">选择语言: </label><select id="language-select" onchange="changeLanguage(this)"><option value="cn" {% if current_language == 'cn' %}selected{% endif %}>简体中文</option><option value="en" {% if current_language == 'en' %}selected{% endif %}>English</option></select></div>{% include "article_list.html" %}<script>function changeLanguage(select) {const lang = select.value;const url = new URL(window.location.href);url.searchParams.set('lang', lang);window.location.href = url.toString();}</script>
{% endblock %}
文章列表模板:article_list.html
article_list.html 用于循环显示文章列表,根据当前语言显示相应的标题和文章概括,并插入商品列表模板:
{% for article in articles %}
<br>{% if article.title_en and current_language == 'en' %} <div class="flex items-center mb-6"><div class="w-8 h-8 bg-orange-500 rounded-full flex items-center justify-center"><span class="text-white text-xl font-bold">Hot</span></div><div class="ml-3"><h1 class="text-lg font-bold"><a href="/article/{{ article.id }}/?lang={{ current_language }}" class="text-blue-400 hover:underline">{{ article.title_en }}</a></h1></div>
</div>
<p class="text-gray-400 mb-6 leading-relaxed"> {% with summary=article.summary_en|default_if_none:""|slice:":80" %}{{ summary|ljust:80 }}{% endwith %}
</p>
{% include "products_list_en.html" %}
{% endif %}{% if article.title_cn and current_language == 'cn' %} <div class="flex items-center mb-6"><div class="w-8 h-8 bg-orange-500 rounded-full flex items-center justify-center"><span class="text-white text-xl font-bold">新</span></div><div class="ml-3"><h1 class="text-lg font-bold"><a href="/article/{{ article.id }}/?lang={{ current_language }}" class="text-blue-400 hover:underline">{{ article.title_cn }}</a></h1></div>
</div>
<p class="text-gray-400 mb-6 leading-relaxed"> {% with summary=article.summary_cn|default_if_none:""|slice:":80" %}{{ summary|ljust:80 }}{% endwith %}
</p>
{% include "products_list_cn.html" %}
{% endif %}{% endfor %}
商品列表模板:products_list_cn.html
products_list_cn.html 用于显示中文商品列表。根据该篇文章是否插入商品,最多5个,最少0个 来进行显示:
<div class="space-y-4">{% if article.product_1_title_cn %}{% include "products_part_1_cn.html" %}{% endif %}{% if article.product_2_title_cn %}{% include "products_part_2_cn.html" %}{% endif %}{% if article.product_3_title_cn %}{% include "products_part_3_cn.html" %}{% endif %}{% if article.product_4_title_cn %}{% include "products_part_4_cn.html" %}{% endif %}{% if article.product_5_title_cn %}{% include "products_part_5_cn.html" %}{% endif %}
</div>
商品部分模板:products_part_1_cn.html
products_part_1_cn.html 用于显示文章中的第一个商品:
<a href="{{ article.product_1_link_cn }}" class="block"><div class="relative bg-gray-800 p-4 rounded-lg hover:bg-gray-700 cursor-pointer hover-arrow transition-all"><h2 class="text-lg font-bold mb-1">{{ article.product_1_title_cn }}</h2><p class="text-gray-400 text-sm" style="padding-right: 120px;"> {% with summary=article.product_1_summary_cn|default_if_none:""|slice:":80" %}{{ summary|ljust:80 }}{% endwith %}</p>{% if article.image_1 %}<div class="absolute top-2 right-12 w-16 h-16" {% if article.tag_choice_1 == 'circle_image' %} style="border-radius: 50%; overflow: hidden;" {% elif article.tag_choice_1 == 'square_image' %} style="border-radius: 0;" {% elif article.tag_choice_1 == 'triangle_image' %} style="clip-path: polygon(50% 0%, 0% 100%, 100% 100%);" {% elif article.tag_choice_1 == 'pentagon_image' %} style="clip-path: polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%);" {% elif article.tag_choice_1 == 'hexagon_image' %} style="clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);" {% else %} style="display: none;" {% endif %}><img src="{{ article.image_1 }}" alt="Article Image" class="w-full h-full object-cover"></div>{% endif %}</div>
</a>
商品部分模板:products_part_2_cn.html - products_part_5_cn.html
商品部分模板的配置方式类似于 products_part_1_cn.html。对于每个商品部分,都需要创建相应的模板文件 products_part_2_cn.html 到 products_part_5_cn.html,并按照上述方式进行配置。
这样一来,通过基础模板、主页模板、文章列表模板和商品部分模板的组合,可以实现页面的模块化开发和多语言支持,提高代码的可维护性和用户体验。
英文商品列表模板:products_list_en.html
products_list_en.html 用于显示英文商品列表。根据该篇文章是否插入商品,最多5个,最少0个来进行显示:
<div class="space-y-4">{% if article.product_1_title_en %}{% include "products_part_1_en.html" %}{% endif %}{% if article.product_2_title_en %}{% include "products_part_2_en.html" %}{% endif %}{% if article.product_3_title_en %}{% include "products_part_3_en.html" %}{% endif %}{% if article.product_4_title_en %}{% include "products_part_4_en.html" %}{% endif %}{% if article.product_5_title_en %}{% include "products_part_5_en.html" %}{% endif %}
</div>
英文商品部分模板:products_part_1_en.html
products_part_1_en.html 用于显示文章中的第一个英文商品:
<a href="{{ article.product_1_link_en }}" class="block"><div class="relative bg-gray-800 p-4 rounded-lg hover:bg-gray-700 cursor-pointer hover-arrow transition-all"><h2 class="text-lg font-bold mb-1">{{ article.product_1_title_en }}</h2><p class="text-gray-400 text-sm" style="padding-right: 120px;"> {% with summary=article.product_1_summary_en|default_if_none:""|slice:":80" %}{{ summary|ljust:80 }}{% endwith %}</p>{% if article.image_1 %}<div class="absolute top-2 right-12 w-16 h-16" {% if article.tag_choice_1 == 'circle_image' %} style="border-radius: 50%; overflow: hidden;" {% elif article.tag_choice_1 == 'square_image' %} style="border-radius: 0;" {% elif article.tag_choice_1 == 'triangle_image' %} style="clip-path: polygon(50% 0%, 0% 100%, 100% 100%);" {% elif article.tag_choice_1 == 'pentagon_image' %} style="clip-path: polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%);" {% elif article.tag_choice_1 == 'hexagon_image' %} style="clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);" {% else %} style="display: none;" {% endif %}><img src="{{ article.image_1 }}" alt="Article Image" class="w-full h-full object-cover"></div>{% endif %}</div>
</a>
英文商品部分模板:products_part_2_en.html - products_part_5_en.html
英文商品部分模板的配置方式与 products_part_1_en.html 类似。对于每个商品部分,都需要创建相应的模板文件 products_part_2_en.html 到 products_part_5_en.html,并按照上述方式进行配置。
通过这些模板的组合和使用,可以学习如何在 Django 项目中使用模板继承与分割,以及如何实现多语言支持,从而提升项目的可维护性和用户体验。
为什么会使用这种自定义的方式?
虽然Django自带的翻译机制(i18n)是一个非常强大的工具,适用于大多数情况下的多语言支持,但在特定的需求和场景下,本文所采用的方法却有其不可替代的优势。以下是这些特定场景和需求的详细分析:
- 即时数据展示和内容管理
优点:
直接展示数据库内容:通过条件判断直接展示数据库中的多语言内容,无需在翻译文件之间进行中转,这可以确保数据的实时性和一致性。
便于内容管理:在一些需要频繁更新的项目中,如新闻网站或电子商务平台,内容管理人员可以直接在数据库中更新不同语言的内容,无需等待翻译文件的生成和编译。
- 灵活的模板定制
优点:
模板自定义:本文方法允许对不同语言的模板进行高度定制,例如,中文和英文模板可以有完全不同的布局和样式。这在一些文化差异较大的项目中尤为重要。
高度灵活:开发者可以针对不同语言版本进行不同的样式和内容调整,而不必受限于统一的翻译文件结构。这种灵活性在需要针对不同市场进行本地化优化时非常有用。
- 快速开发和原型设计
优点:
快速实现:不需要配置和管理翻译文件,开发者可以快速实现多语言支持,适用于项目初期的快速原型设计和验证。
低学习曲线:对于刚接触Django的开发者来说,不需要额外学习i18n的相关知识即可实现多语言支持,降低了开发难度和时间成本。
- 特定业务逻辑需求
优点:
复杂业务逻辑处理:在某些特定的业务需求下,需要在展示内容时进行复杂的逻辑判断和处理。例如,不同语言版本可能需要展示不同的广告或促销信息,这种情况下,通过模板条件判断可以更灵活地实现业务需求。
可扩展性:本文方法可以针对特定业务需求进行扩展,如在不同语言版本中显示不同的商品列表和内容,满足更加个性化的需求。
- 无需额外配置和依赖
优点:
简化配置:不需要依赖Django的中间件和配置,减少了系统依赖和配置复杂度,适用于一些简单的项目和开发环境。
减少出错可能:由于无需生成和编译翻译文件,减少了在这一步骤中可能出现的错误和不一致问题。
总结
虽然Django自带的翻译机制是处理多语言支持的最佳实践,但在特定需求和场景下,本文的方法提供了无法替代的灵活性和便捷性。这种方法在处理实时数据、定制化模板、快速开发和特定业务需求上具有明显优势,适用于一些需要快速实现、频繁更新和高度定制的项目。
相关文章:
Django 模板分割及多语言支持案例【需求文档】-->【实现方案】
Django 模板分割及多语言支持案例 这个案例旨在提供一个清晰的示范,展示如何将复杂的页面分解为多个可复用的模板组件,使代码更加模块化和易于管理。希望这篇案例文章对你有所帮助。 概述 在 Django 项目开发中,使用模板分割和多语言支持能…...
【hackmyvm】Diophante 靶场
1. 基本信息^toc 这里写目录标题 1. 基本信息^toc2. 信息收集2.1. 端口扫描2.2. 目录扫描2.3. knock 3. WordPress利用3.1. wpscan扫描3.2. smtp上传后门 4. 提权4.1. 提权leonard用户4.2. LD劫持提权root 靶机链接 https://hackmyvm.eu/machines/machine.php?vmDiophante 作者…...
基于MATLAB的图像增强
🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 一、背景及意义介绍背景图像采集过程中的局限性 意义 二、概述三、代码结构及说明(一)整体结构(二…...
P10425 [蓝桥杯 2024 省 B] R 格式
题目描述: 小蓝最近在研究一种浮点数的表示方法:R 格式。对于一个大于 00 的浮点数 d,可以用 R 格式的整数来表示。给定一个转换参数 n,将浮点数转换为 R 格式整数的做法是: 将浮点数乘以 2^n。四舍五入到最接近的整…...
《软件工程文档攻略:解锁软件开发的“秘籍”》
《软件工程文档攻略:解锁软件开发的“秘籍”》 一、引言(一)简述软件工程文档的重要地位 二、软件文档的分类及作用(一)按形式分类1. 工作表格2. 文档或文件 (二)按产生和使用范围分类1. 开发文…...
Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络
前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...
sqlilabs靶场二十一关二十五关攻略
第二十一关 第一步 可以发现cookie是经过64位加密的 我们试试在这里注入 选择给他编码 发现可以成功注入 爆出表名 爆出字段 爆出数据 第二十二关 跟二十一关一模一样 闭合换成" 第二十三关 第二十三关重新回到get请求,会发现输入单引号报错,…...
时间管理系统|Java|SSM|JSP|
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…...
长轮询DeferredResult原理
DeferredResult常用来实现客户端长轮询,可以将异步处理的结果在特定时间内(如果设置了超时时间)返回给客户端。 Slf4j RestController RequestMapping("/demo") public class DemoDeferredResult {GetMapping("/deferredResu…...
TouchGFX移植(5)增加触屏驱动
一)增加驱动代码gt9xxx.c和ctiic.c到工程中的BSP目录下: 二)更改触摸文件STM32TouchController.cpp 1)在STM32TouchController.cpp文件中增加: #include “gt9xxx.h” 2)增加gt9xxx_init(); void STM32TouchControlle…...
(九)腾讯cloudstudio(ubuntu)+akiaaa大神 Stable Diffusion整合包 AI绘画教程
一、说明 在网上转了一圈,发现确实akiaaa大神的整合包不错,看看这界面就比我前面的流弊多了,后面我们就要把这个界面一步一步干出来 二、环境准备 这里和前面的一样 (七)腾讯cloudstudioStable-Diffusion-webui AI绘…...
设计模式-访问者设计模式
介绍 访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变个元素的类的前提下定义作用于这些元素的新操作。 问题:在一个机构里面有两种员工,1.Teacher 2.Engineer 员…...
深度学习实战车辆目标跟踪【bytetrack/deepsort】
本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化,该数据集包含丰富的车辆目标图像样本…...
lammps中EDGE、INF、NULL等常量的含义
在lammps命令中,有几个比较常见的量:EDGE、INF、NULL,不少初学者不知道什么意思,本文详细介绍一下这几个量的含义及用法。 1. EDGE EDGE表示当前box的边界,常用到需要设置坐标的命令中,如region、fix wall/reflect。 EDGE仅表示当前box边界的坐标值,当box尺寸发生变化后…...
Mono里建立调试C#脚本运行环境
前面已经介绍了怎么样来执行一个嵌入式的脚本框架, 这个框架是mono编写的一个简单的例子。 如果不清楚,可以参考前文: https://blog.csdn.net/caimouse/article/details/144632391?spm=1001.2014.3001.5501 本文主要来介绍一下,我们的C#脚本是长得怎么样的,它大体如下…...
241221面经
1,JVM 的实现中堆、栈和方法区的区别是什么? 堆(Heap) 功能 堆是 JVM 内存中最大的一块,主要用于存储对象实例。无论是通过new关键字创建的对象,还是数组,都在堆上分配内存。它是被所有线程共享…...
【论文复刻】新型基础设施建设是否促进了绿色技术创新的“量质齐升”—来自国家智慧城市试点的证据(C刊《中国人口·资源与环境》
一、数据来源:住建部、国家知识产权局、中国城市统计年鉴,内含原始数据、处理代码和基准回归 二、数据范围: DID 为了延长政策效应估计的时间区间,将住建部公布的首批国家智慧城市作为处理组,非试点城市作为对照组。将…...
libreoffice表格python宏教程 一
一、安装python宏扩展 LibreOffice自带了一个宏编辑器,但是只能用basic语言,无法用Python。 所以,我们必须在单独的编辑器中编写Python代码。 需要安装apso扩展,此扩展可以创建删除管理python宏文件,同时还能设置偏好…...
C/C++语言基础--C++STL库之仿函数、函数对象、bind、function简介
本专栏目的 更新C/C的基础语法,包括C的一些新特性 前言 STL无疑是C史上一个重要的发明,未来我将更新STL有关的知识点,入门绝对够了(看目录就知道了👀)这是第二篇,讲仿函数C语言后面也会继续更新知识点,如…...
前端导出PDF的组件及方法
前端导出PDF的组件及方法 在Web应用程序中,导出PDF文件是一项常见的需求。无论是为了打印、分享还是存档,能够将网页内容转换为PDF格式都非常有用。幸运的是,前端开发者有多种方法和组件可以实现这一功能。在本文中,我们将详细介…...
大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop࿰…...
水文知识图谱构建-学习+代码
文章目录 水文模型知识图谱构建与应用(核心)面向水利防汛抢险的知识图谱构建与应用知识图谱在水利工程中的构建与应用代码 水文模型知识图谱构建与应用(核心) 水文模型知识图谱构建与应用 题目:水文模型知识图谱构建…...
python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django
windows首先安装rabbitmq 点击参考安装 1、环境介绍 Python 3.10.16 其他通过pip安装的版本(Django、pika、celery这几个必须要有最好版本一致) amqp 5.3.1 asgiref 3.8.1 async-timeout 5.0.1 billiard 4.2.1 celery 5.4.0 …...
clickhouse优化记录
一、注重使用分区键来加快查询 在大数据量的情况下,如果查询语句中,可以使用分区键来进行查询,可以极大缩小数据的查询范围,加快查询速度。 二、使用order by的列,适用最左前缀匹配原则 比如表的结构是 order by(id…...
RabbitMQ如何构建集群?
大家好,我是锋哥。今天分享关于【RabbitMQ如何构建集群?】面试题。希望对大家有帮助; RabbitMQ如何构建集群? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中,集群(Cluster&#x…...
Python解压tar压缩文件
import tarfile import os# 解压文件def untar(self, log_tar_file, destination_dir):# 打开tar文件tar_file_path for tar_file_path in glob.glob(os.path.join(log_tar_file, **/*.tar), recursiveTrue):print(日志压缩文件:,tar_file_path)if ! tar_file_pat…...
Mac升级macOS 15 Sequoia后,无法ssh连接本地虚拟机
现象 macOS 15后,无法ssh连接本地启动的虚拟机,提示错误: No route to host,也ping不通。包括UTM、Parallels Desktop这两个虚拟机软件。之前都是没问题的,通过一些简单排查,目前没发现什么问题。 在虚拟…...
Unity录屏插件-使用Recorder录制视频
目录 1.Recorder的下载 2.Recorder面板 2.1常规录制属性 2.2录制器配置 2.2.1添加录制器 2.2.2配置Input属性 2.2.3配置 Output Format 属性 2.2.4配置 Output File 属性 3.Recorder的使用 3.1录制Game View视频 3.1.1Recorder配置与场景搭建 3.1.2开始录制 3.1.3…...
[ESP]从零开始的Arduino IDE安装与ESP环境配置教程
一、前言 最近也是在比赛方面比较忙,没有更多的时间和精力去更新长文章了。这几周都更倾向于环境搭建的教程,这类教程写起来确实方便,也不怎么费时间,一个下午基本可以搞定,哈哈,我保证不是在为自己想摆烂找…...
重拾设计模式--状态模式
文章目录 状态模式(State Pattern)概述状态模式UML图作用:状态模式的结构环境(Context)类:抽象状态(State)类:具体状态(Concrete State)类&#x…...
2024年全球办公键盘行业总体规模、主要企业国内外市场占有率及排名
根据QYResearch研究团队调研统计,2023年全球办公键盘市场销售额达到了 亿元,预计2030年将达到 亿元,年复合增长率(CAGR)为 %(2024-2030)。中国市场在过去几年变化较快,2023年市场规模…...
ThreadLocal用法详解
ThreadLocal 是 Java 中的一个类,它提供了线程局部变量的功能。线程局部变量是线程隔离的,每个使用该变量的线程都有其自己的变量副本,因此每个线程可以操作自己的线程局部变量,而不会和其他线程冲突。 以下是 ThreadLocal 的一些…...
linux中docker命令大全
基本命令 docker pull 拉取镜像 docker pull docker push 推送镜像到DockerRegistry docker push docker images 查看本地镜像 docker images docker rmi 删除本地镜像 docker rmi docker run 创建并运行容器(不能重复创建) docker run d…...
linux-----常用指令
文件和目录操作指令 ls(list)指令 功能:用于列出目录的内容,包括文件和子目录。示例: ls:列出当前目录下的所有非隐藏文件和目录。例如,在一个包含文件file1.txt、file2.txt和目录dir1的目录中&…...
1.gitlab 服务器搭建流程
前提条件: 一、服务器硬件水平 搭建gitlab服务器最低配置要求2核4G,低于这个配置的服务器运行效果很差。 gitlab官网:https://about.gitlab.com/ 下载地址:gitlab/gitlab-ce - Packages packages.gitlab.com 本机ubuntu 二、安装依赖 su…...
C 语言基础运算:输入两个整数并计算和、差、积
一、C 语言编程世界初窥 在当今数字化浪潮汹涌澎湃的时代,编程已成为一项极具影响力的技能,它犹如一把神奇的钥匙,能够开启无数创新与可能的大门。而在众多编程语言中,C 语言无疑是一颗最为璀璨耀眼的恒星,长久以来在编程的浩瀚星空中熠熠生辉,散发着独特而迷人的魅力。…...
PC寄存器(Program Counter Register) jvm
在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色,它是JVM执行引擎的核心组成部分之一。以下是PC寄存器在JVM中的具体角色和职责: 指令执行指针: PC寄存…...
CPU概述随堂测试
1. [单选题] 下列部件不属于控制器的是( )。 A. 指令寄存器 B. 程序计数器 C. 程序状态字寄存器 D. 时序电路 正确答案:C 控制器的主要组成部分包括指令寄存器(IR)、程序计数器(PC),以及用于控制…...
centos7下docker 容器实现redis主从同步
1.下载redis 镜像 docker pull bitnami/redis2. 文件夹授权 此文件夹是 你自己映射到宿主机上的挂载目录 chmod 777 /app/rd13.创建docker网络 docker network create mynet4.运行docker 镜像 安装redis的master -e 是设置环境变量值 docker run -d -p 6379:6379 \ -v /a…...
【数据安全】如何保证其安全
数据安全风险 数字经济时代,数据已成为重要的生产要素。智慧城市、智慧政务的建设,正以数据为核心,推动城市管理的智能化和公共服务的优化。然而,公共数据开放共享与隐私保护之间的矛盾日益凸显,如何在确保数据安全的…...
GTID详解
概念和组成 1,全局事务表示:global transaction identifiers 2, GTID和事务一一对应,并且全局唯一 3,一个GTID在一个服务器上只执行一次 4,mysql 5.6.5开始支持 组成 GTID server_uuid:transaction_id 如…...
【bodgeito】攻防实战记录
也许有一天我们再相逢,睁开眼睛看清楚,我才是英雄。 进入网站整体浏览网页 点击页面评分进入关卡 一般搭建之后这里都是红色的,黄色是代表接近,绿色代表过关 首先来到搜索处本着见框就插的原则 构造payload输入 <script>…...
【基础篇】1. JasperSoft Studio编辑器与报表属性介绍
编辑器介绍 Jaspersoft Studio有一个多选项卡编辑器,其中包括三个标签:设计,源代码和预览。 Design:报表设计页面,可以图形化拖拉组件设计报表,打开报表文件的主页面Source:源代码页码ÿ…...
SpringBoot+Vue3实现阿里云视频点播 实现教育网站 在上面上传对应的视频,用户开会员以后才能查看视频
要使用阿里云视频点播(VOD)实现一个教育网站,其中用户需要成为会员后才能查看视频,这个过程包括上传视频、设置权限控制、构建前端播放页面以及确保只有付费会员可以访问视频内容。 1. 视频上传与管理 创建阿里云账号ÿ…...
在VBA中结合正则表达式和查找功能给文档添加交叉连接
在VBA中搜索文本有两种方式可用,一种是利用Range.Find对象(更常见的形式可能是Selection.Find,Selection是Range的子类,Selection.Find其实就是特殊的Range.Find),另一种方法是利用正则表达式,但…...
spring\strust\springboot\isp前后端那些事儿
后端 一. 插入\更新一条数据(老) Map<String, Object> parameterMap MybatisUtil.initParameterSave("Send_ProjectFrozenLog", sendProjectFrozenLog); commonMapper.insert(parameterMap);parameterMap MybatisUtil.initParameter…...
Redis——缓存预热+缓存雪崩+缓存击穿+缓存穿透
文章目录 1、 缓存预热2、 缓存雪崩3、 缓存击穿4、 缓存穿透总结 1、 缓存预热 什么是预热: mysql加入新增100条记录,一般默认以mysql为准作为底单数据,如何同步给redis(布隆过滤器)这100条新数据。 为什么需要预热…...
【Java计算机毕业设计】基于Springboot小药店销售管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】
源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储:…...
AIGC与现代教育技术
目录 引言 一、AIGC在教育技术中的基本概念 1.1 什么是AIGC? 1.2 传统教育技术和AIGC的对比 二、实现过程:AIGC在现代教育中的实现 2.1 自动生成课件内容 2.1.1 代码示例:使用GPT生成教学文案 2.1.2 完善自动生成资料 2.1.3 多模态内…...
【活动邀请·深圳】深圳COC社区 深圳 AWS UG 2024 re:Invent re:Cap
re:Invent 是全球云计算领域的顶级盛会,每年都会吸引来自世界各地的技术领袖、创新者和实践者汇聚一堂,分享最新的技术成果和创新实践,深圳 UG 作为亚马逊云科技技术社区的重要组成部分,将借助 re:Invent 的东风,举办此…...