BBS-个人博客项目完整搭建、BBS多人博客项目基本功能和需求、项目程序设计、BBS数据库表结构设计、创建BBS表模型
一、BBS-个人博客项目完整搭建
项目开发流程
一、项目分类
现在互联网公司需要开发的主流web项目一般分为两类:面向互联网用户,和公司内部管理。面向互联网用户: C(consumer)端项目
公司内部管理:B(business)端项目还有一类web应用,基本采用基于角色的权限控制,不同的员工在这套系统中拥有不同的权限,
适用于公司内部管理。基于权限的后台关系系统:RBAC权限管理系统二、项目开发模式分类
最常见的两类为瀑布开发模式和敏捷开发模式。
1、瀑布开发模式瀑布开发模式是一种更倾向于严格控制的管理模式,要求在提出需求之后,充分完成项目的规划,各阶段都要经过严格的评审,只有当一个阶段的需求完成得非常好时才能进入下一个阶段。但是瀑布开发模式开发的失败率较高,且周期较长,于是就产生了敏捷开发模式。2、敏捷开发模式敏捷开发模式的核心是迭代开发,它将一个项目完整的开发流程分为了几个周期(也可以说是版本),由于每个版本的开发流程相似,看上去相当于一个重复迭代的过程。这么开发的好处是,使一个大的项目能在较短时间内上线,并在后续对它进行不断地迭代和优化。3、项目开发流程-立项-需求分析-原型图(产品画的)-切图-技术选型,数据库架构设计-前后端协同开发-上线测试服务器联调-测试-修改bug-上线运行
二、BBS多人博客项目基本功能和需求
# 开发任意的项目第一个阶段就是弄清楚你要开发什么功能# 一个项目最重要的是表结构的设计,大部分时间都是用来设计表.
# 你在企业中对于一个完成的项目写代码的时间大概有个30%,其余的时间都用来做铺垫
比如:产品需求的确定,技术选型,数据库设计...# 注册登录功能
"""1. 用户表(你可以自己创建,也可以使用auth_user表)扩展auth_user表phone avatar:用来存储头像的地址create_time:用户注册的时间...blog_id = OneToOneField(to='blog') 2. 站点表(blog)站点名称站点标题站点样式:存的是css的路径3. 分类表(cate)分类名称blog = ForeignKey(to='blog') 4. 标签表标签名称blog = ForeignKey(to='blog') 5. 文章表(*******************article)文章标题文章摘要文章内容文章发表时间# 1. 通过文章id去点赞表或者评论表中查询# 优化# 2. 在文章表中增加子弹up_num 1down_num 1comment_num 4# 外键关系子弹cate = ForeignKey(to='cate') tag = ManyToManyField(to='tag')blog = ForeignKey(to='blog') 6. 点赞点踩表谁给哪篇文章什么时间点了赞还是踩user ForeignKey(to='user') article ForeignKey(to='article') is_up 0/1create_timeid user_id article_id is_up create_time1 1 1 0 ‘’2 2 1 1 ‘’7. 评论表(comment)谁给哪篇文章在什么时间评论了什么内容user ForeignKey(to='user') article ForeignKey(to='article') contentcreate_timeparent_id ForeignKey(to='comment') parent_id ForeignKey(to='self')#自关联id user_id article_id content create_time parent_id1 1 1 0 ‘’ 02 2 1 1 ‘’ 13 2 1 1 ‘’ 2子评论!!!评论评论的评论!!!根评论1. Python是世界上最好的语言1.1 PHP是世界上最好的语言1.2 Java是世界上最好的语言无限极分类 category表id cate_name pid1 手机/数码 02 电脑/办公 0...20 手机通讯 121 运营商 1...50 5G手机 2051 手机 20...100 128G/5G 50"""
三、项目程序设计
四、BBS数据库表结构设计
1.用户表:UserInfo
(通过继承AbstractUser类来扩写Auth_user)
•phone:用户的联系方式
•bg_img: 用户的主页背景
•province: 用户的省份
•city: 用户的城市
•gender : 用户的性别
•avatar:用户的头像
•blog:用户的博客站点(外键一对一关联博客表Blog)
2.博客表:Blog
•title:博客标题
•subtitle: 博客子标题
•style:博客样式
3.文章表:Article
•title:文章标题
•head_img: 头像
•description:文章摘要
•content:文章内容
•create_time:文章的创建时间
•modify_time: 文章的修改时间
•up_num :点赞数
•down_num:点踩数
•comment_num:评论数
•blog:属于哪个博客站点(外键关联博客表Blog)
•category:属于哪个分类(外键关联分类表Category)
4.标签表:Tag
•name:标签名
•blog:属于哪个博客站点(外键关联博客表Blog)
5.分类表:Category
•name:分类名
•blog:属于哪个博客站点(外键关联博客表Blog)
6.评论表:Comment
•user:评论的用户(外键关联用户表UserInfo)
•article:该评论属于哪篇文章(外键关联文章表Article)
•content:评论内容
•comment_time: 评论的创建时间
•comment_id:评论的目标id(外键进行自关联)
7.点赞点踩表:UpAndDown
•user:来自哪个用户(外键关联用户表UserInfo)
•article:属于哪篇文章(外键关联文章表Article)
•is_up:点赞还是点踩(根据bool值来判断)
•create_time : 点赞或踩的时间
8.文章标签表: Tag2Article
根据文章与标签的多对多关系手动建立的第三张表
• tag:标签名(外键关联标签表Tag)
• article:属于哪篇文章(外键关联文章表Article)
9.轮播图表 Swiper (拓展)
• image: 轮播图图片名
• title:轮播图标题
• img_url: 点击轮播图要跳转的url地址
10.日志表: Log(拓展)
• id: 日志id
• ip: 访问的ip地址
• time: 访问的时间
• url: 访问的url
• device: 访问的浏览器
• platform:访问的操作系统类型
11.日志表: Log(拓展)
• id: 日志id
• ip: 访问的ip地址
• time: 访问的时间
• url: 访问的url
• device: 访问的浏览器
• platform:访问的操作系统类型
五、创建BBS表模型
模型层models.py中写入以下orm语句模型来创建表模型
from django.contrib.auth.models import AbstractUser
from django.utils.html import mark_safe
from django.db import models
from markdown import markdown# 日志表
class Log(models.Model):id = models.AutoField(primary_key=True)ip = models.CharField(max_length=64, verbose_name='访问IP', help_text='访问用户的IP地址')time = models.DateTimeField(auto_now_add=True, verbose_name='访问时间', help_text='该用户的访问时刻')url = models.CharField(max_length=64, verbose_name='访问的URL', help_text='该用户访问的URL地址')device = models.CharField(max_length=256, null=True, verbose_name='访问的浏览器', help_text='该用户是用什么浏览器访问的')platform = models.CharField(max_length=256, null=True, verbose_name='访问的系统', help_text='该用户用的是什么操作系统')# 定义这个表中默认显示的字段def __str__(self):return self.ip# 定义这个表在admin后台中显示的别名class Meta:ordering = ['id']verbose_name_plural = '日志'# 用户表
class UserInfo(AbstractUser):avatar = models.FileField(upload_to='avatar/', default='avatar/default.png', verbose_name='头像', help_text='该用户的头像')bg_img = models.FileField(upload_to='bg_img/', default='bg_img/default_bg.png', verbose_name='头像',help_text='该用户的主页背景')province = models.CharField(max_length=32, default='', verbose_name='省', help_text='该用户的省')city = models.CharField(max_length=32, default='', verbose_name='城市', help_text='该用户的市')gender = models.IntegerField(choices=((0, '保密'), (1, '男'), (2, '女')), default=0, verbose_name='性别',help_text='该用户的性别')phone = models.CharField(max_length=11, null=True, default='', verbose_name='联系方式', help_text='该用户的联系方式')blog = models.OneToOneField(to='Blog', on_delete=models.CASCADE, null=True, verbose_name='博客', help_text='该用户的博客')def __str__(self):return self.usernameclass Meta:verbose_name_plural = '用户'# 博客表(个人站点)
class Blog(models.Model):title = models.CharField(max_length=32, verbose_name='博主昵称', help_text='博主昵称')subtitle = models.CharField(max_length=32, verbose_name='子标题/公告', help_text='博客的子标题/公告')style = models.CharField(max_length=32, verbose_name='样式', help_text='该博客独有的样式') # 此处未启用def __str__(self):return self.titleclass Meta:verbose_name_plural = '博客站点'# 文章表
class Article(models.Model):title = models.CharField(max_length=32, verbose_name='标题', help_text='文章的标题')head_img = models.FileField(upload_to='article_head_img/', default='article_head_img/default_head.png',verbose_name='头图',help_text='文章的头图')description = models.CharField(max_length=128, verbose_name='摘要', help_text='简要描述该文章')content = models.TextField(verbose_name='内容', help_text='文章的内容')markdown = models.TextField(verbose_name='Markdown内容', default='暂无', help_text='文章的Markdown内容')create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间', help_text='该文章的创建时间')modify_time = models.DateTimeField(auto_now=True, verbose_name='修改时间', help_text='该文章的最后修改时间')up_num = models.IntegerField(default=0, verbose_name='点赞数', help_text='该文章的点赞数')down_num = models.IntegerField(default=0, verbose_name='点踩数', help_text='该文章的点踩数')comment_num = models.IntegerField(default=0, verbose_name='评论数', help_text='该文章的评论数')blog = models.ForeignKey(to='Blog', on_delete=models.CASCADE, null=True, blank=True, verbose_name='博客',help_text='该文章属于哪个博客页面')category = models.ForeignKey(to='Category', on_delete=models.CASCADE, null=True, blank=True, verbose_name='分类',help_text='该文章属于哪个分类')tag = models.ManyToManyField(to='Tag', through='Tag2Article',through_fields=('article', 'tag'), verbose_name='标签',help_text='该文章有哪些标签')def get_text_md(self):return mark_safe(markdown(self.content))def __str__(self):return self.titleclass Meta:verbose_name_plural = '文章'ordering = ['id', ]# 标签表
class Tag(models.Model):name = models.CharField(max_length=32, verbose_name='标签', help_text='标签的名字')blog = models.ForeignKey(to='Blog', on_delete=models.DO_NOTHING, null=True, blank=True, verbose_name='博客',help_text='该标签属于哪个博客页面')def __str__(self):return self.nameclass Meta:verbose_name_plural = '标签'# 分类表
class Category(models.Model):name = models.CharField(max_length=32, verbose_name='分类', help_text='分类的名称')blog = models.ForeignKey(to='Blog', on_delete=models.DO_NOTHING, null=True, blank=True, verbose_name='博客',help_text='该分类属于哪个博客页面')def __str__(self):return self.nameclass Meta:verbose_name_plural = '分类'# 评论表
class Comment(models.Model):user = models.ForeignKey(to='UserInfo', on_delete=models.DO_NOTHING, verbose_name='用户', help_text='该评论来自哪个用户')article = models.ForeignKey(to='Article', on_delete=models.CASCADE, null=True, verbose_name='文章',help_text='评论的对象是哪篇文章')content = models.CharField(max_length=256, verbose_name='内容', help_text='评论的内容')comment_time = models.DateTimeField(auto_now_add=True, verbose_name='时间', help_text='评论的时间')comment_id = models.ForeignKey(to='self', on_delete=models.CASCADE, null=True, verbose_name='评论id',help_text='对哪个id的评论进行评论')def __str__(self):return self.contentclass Meta:verbose_name_plural = '评论'# 点赞点踩
class UpAndDown(models.Model):user = models.ForeignKey(to='UserInfo', on_delete=models.CASCADE, verbose_name='用户', help_text='来自哪个用户')article = models.ForeignKey(to='Article', on_delete=models.CASCADE, null=True, verbose_name='文章',help_text='针对哪篇文章')is_up = models.BooleanField(null=True, verbose_name='点赞点踩', help_text='True为点赞,False为点踩')create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间', help_text='点赞点踩的时间')def __str__(self):return self.userclass Meta:verbose_name_plural = '点赞点踩'# 标签、文章关联表
class Tag2Article(models.Model):tag = models.ForeignKey(to='Tag', on_delete=models.SET_DEFAULT, default='', verbose_name='标签', help_text='关联的标签')article = models.ForeignKey(to='Article', on_delete=models.CASCADE, default='', verbose_name='文章',help_text='关联的文章')class Meta:verbose_name_plural = '标签关联文章'# 轮播图表
class Swiper(models.Model):image = models.FileField(upload_to='swiper_img/', default='swiper_img/default.jpg', verbose_name='图片',help_text='轮播图的图片')title = models.CharField(max_length=32, verbose_name='标题', help_text='图片的标题')img_url = models.CharField(max_length=64, verbose_name='URL', help_text='点击图片要跳转的URL地址')def __str__(self):return self.img_urlclass Meta:verbose_name_plural = '轮播图'
django2表设计
from django.db import models"""
先写普通字段
之后再写外键字段
"""
from django.contrib.auth.models import AbstractUser# auth_user的扩展表(用户表)
class UserInfo(AbstractUser):phone = models.BigIntegerField(verbose_name='手机号', null=True)# 头像avatar = models.FileField(upload_to='avatar/', default='avatar/default.png', verbose_name='用户头像')"""给avatar字段传文件对象 该文件会自动存储到avatar文件下 然后avatar字段只保存文件路径avatar/default.png"""create_time = models.DateField(auto_now_add=True)blog = models.OneToOneField(to='Blog', null=True, on_delete=models.CASCADE)# 博客表
class Blog(models.Model):site_name = models.CharField(verbose_name='站点名称', max_length=32)site_title = models.CharField(verbose_name='站点标题', max_length=32)# 简单模拟 带你认识样式内部原理的操作site_theme = models.CharField(verbose_name='站点样式', max_length=64) # 存css/js的文件路径# 分类表
class Category(models.Model):name = models.CharField(verbose_name='文章分类', max_length=32)blog = models.ForeignKey(to='Blog', null=True, on_delete=models.CASCADE)# 标签表
class Tag(models.Model):name = models.CharField(verbose_name='文章标签', max_length=32)blog = models.ForeignKey(to='Blog', null=True, on_delete=models.CASCADE)# 文章表
class Article(models.Model):title = models.CharField(verbose_name='文章标题', max_length=64)desc = models.CharField(verbose_name='文章简介', max_length=255)# 文章内容有很多 一般情况下都是使用TextFieldcontent = models.TextField(verbose_name='文章内容')create_time = models.DateField(auto_now_add=True)# 数据库字段设计优化up_num = models.IntegerField(verbose_name='点赞数', default=0)down_num = models.IntegerField(verbose_name='点踩数', default=0)comment_num = models.IntegerField(verbose_name='评论数', default=0)# 外键字段blog = models.ForeignKey(to='Blog', null=True, on_delete=models.CASCADE)category = models.ForeignKey(to='Category', null=True, on_delete=models.CASCADE)tags = models.ManyToManyField(to='Tag',through='Article2Tag',through_fields=('article', 'tag'))# 半自动创建第三章表(文章、标签关联表)
class Article2Tag(models.Model):article = models.ForeignKey(to='Article', on_delete=models.CASCADE)tag = models.ForeignKey(to='Tag', on_delete=models.CASCADE)# 点赞点彩
class UpAndDown(models.Model):user = models.ForeignKey(to='UserInfo', on_delete=models.CASCADE)article = models.ForeignKey(to='Article', on_delete=models.CASCADE)is_up = models.BooleanField() # 传布尔值 存0/1# 评论表
class Comment(models.Model):user = models.ForeignKey(to='UserInfo', null=True, on_delete=models.CASCADE)article = models.ForeignKey(to='Article', null=True, on_delete=models.CASCADE)content = models.CharField(verbose_name='评论内容', max_length=255)comment_time = models.DateTimeField(verbose_name='评论时间', auto_now_add=True)# 自关联parent = models.ForeignKey(to='self', null=True, on_delete=models.CASCADE) # 有些评论就是根评论
相关文章:

BBS-个人博客项目完整搭建、BBS多人博客项目基本功能和需求、项目程序设计、BBS数据库表结构设计、创建BBS表模型
一、BBS-个人博客项目完整搭建 项目开发流程 一、项目分类 现在互联网公司需要开发的主流web项目一般分为两类:面向互联网用户,和公司内部管理。面向互联网用户: C(consumer)端项目 公司内部管理:B(business)端项目还有一类web应用ÿ…...

智能设备管理系统对企业设备管理效果有作用吗?
智能设备管理系统对企业设备管理效果具有显著的作用和积极的影响。它可以提高设备管理的效率、准确性和可靠性,帮助企业降低运营成本、提高生产效率,并为企业提供更好的决策支持。以下是智能设备管理系统对企业设备管理效果的几个方面影响: …...

取证--实操
2022年美亚杯个人赛 运用软件DB Browser for SQLite (一款用于查看SQLlite数据库文件的浏览器工具) 火眼,盘古石手机取证系统等 案件详情 于2022年10月,有市民因接获伪冒快递公司的电邮,不慎地于匪徒架设的假网站提…...
react组件化开发详解
React是一个流行的JavaScript库,用于构建用户界面,并且以组件化的方式进行开发。下面将详解React组件化开发的概念和步骤: 组件化思维: 组件化开发是将复杂的用户界面划分为独立、可重用的小部件(组件)。…...

【JVM】对String::intern()方法深入详解(JDK7及以上)
文章目录 1、什么是intern?2、经典例题解释例1例2例3 1、什么是intern? String::intern()是一个本地方法,它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象的引用&#…...
7.1 C/C++ 实现动态数组
动态数组相比于静态数组具有更大的灵活性,因为其大小可以在运行时根据程序的需要动态地进行分配和调整,而不需要在编译时就确定数组的大小。这使得动态数组非常适合于需要动态添加或删除元素的情况,因为它们可以在不浪费空间的情况下根据需要…...

iOS问题记录 - Xcode 15安装低版本iOS模拟器(持续更新)
文章目录 前言开发环境问题描述问题分析1. 定位问题2. 逆向分析2.1. IDA Free2.2. Hopper Disassembler Demo 3. 模拟器日志4. supportedArchs 解决方案最后 前言 最近新需求很多,项目改动很大,开发完成后想测一遍在低版本iOS系统上的兼容性,…...

高端百度地图开发2:自定义水滴头像(鼠标事件、API封装对接)
高端百度地图开发系列 高端百度地图开发1:自定义水滴头像(自定义标注覆盖物、Overlay覆盖类) 自定义水滴头像之鼠标事件、API封装对接 高端百度地图开发系列一、添加自定义覆盖物的方法二、对接API数据1.获取API数据(模拟)2.遍历数据3.添加自…...

R语言生存分析(机器学习)(2)——Enet(弹性网络)
弹性网络(Elastic Net):是一种用于回归分析的统计方法,它是岭回归(Ridge Regression)和lasso回归(Lasso Regression)的结合,旨在克服它们各自的一些限制。弹性网络能够同时考虑L1正则…...
【Docker】使用 Docker Registry 搭建自己的 Docker 镜像仓库
使用 Docker Registry 搭建自己的 Docker 镜像仓库 在使用 Docker 进行应用程序的开发和部署时,使用 Docker 镜像仓库是一个很好的实践。它允许集中存储和管理 Docker 镜像,方便团队协作和版本控制。在本文中,将介绍如何使用 Docker Registr…...
Spring 是什么框架?
Spring 是 Java EE 编程领域的一款轻量级的开源框架,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,它的目标就是要简化 Java 企业级应用程序的开发难度和周期。 Spring 自诞生以来备受青睐,一直被广大开发人员作为 Java 企业…...

Azure添加网络接口
添加网络接口的意义 在 Azure 上,为虚拟机添加网络接口的意义包括以下几个方面: 扩展网络带宽:通过添加多个网络接口,可以增加虚拟机的网络带宽,提高网络传输速度和数据吞吐量。实现网络隔离:每个网络接口…...

Linux 内核第一版 (v0.01) 开源代码解读
探索Linux v0.01的内部结构,Linux内核经常被认为是一个庞大的开源软件。在撰写本文时,最新版本是v6.5-rc5,包含36M行代码。不用说,Linux是几十年来许多贡献者辛勤工作的成果。 Linux 内核首个开源版本 (v0.01) 的体积非常小&…...
tp6 v3微信退款
/*** Notes:退款* param $out_trade_no 支付时候订单号(order表 original_bn)两个参数选一个这个要选对* param $out_refund_no 退款订单号* param $total 订单金额* param $refund 退款金额* Time: 2023-08-10*/public function refundMoney($out_trade…...

使用 AndroidX 增强 WebView 的能力
在App开发过程中,为了在多个平台上保持一致的用户体验和提高开发效率,许多应用程序选择使用 H5 技术。在 Android 平台上,通常使用 WebView 组件来承载 H5 内容以供展示。 一.WebView 存在的问题 自 Android Lollipop 起,WebVie…...

Maven基础之仓库、命令、插件机制
文章目录 Maven 仓库中央仓库和本地仓库中央仓库本地仓库 Maven 命令generate 命令compile 命令clean 命令test 命令package 命令install 命令 Maven 插件机制官方插件:Compile 插件Tomcat 7 插件 Maven 仓库 中央仓库和本地仓库 [✎] 简单一点说 中央仓库是一个网…...

【ArcGIS】经纬度数据转化成平面坐标数据
将点位置导入Gis中,如下(经纬度表征位置): 如何利用Gis将其转化为平面坐标呢? Step1 坐标变换 坐标变换,打开ArcToolbox,找到“数据管理工具”->“投影和变换”->“要素”->“投影”…...
使用自己的数据利用pytorch搭建全连接神经网络进行回归预测
使用自己的数据利用pytorch搭建全连接神经网络进行回归预测 1、导入库2、数据准备3、数据拆分4、数据标准化5、数据转换6、模型搭建7、模型训练8、模型预测9、完整代码 1、导入库 引入必要的库,包括PyTorch、Pandas等。 import numpy as np import pandas as pd f…...
103.216.154.X服务器出现漏洞了有什么办法?
服务器出现漏洞是一种严重的安全风险,需要及时采取措施来应对。以下是一些常见的应对措施: 及时更新补丁:确保服务器上的操作系统、应用程序和软件都是最新版本,并及时应用相关的安全补丁,以修复已知的漏洞。 强化访问…...

数据结构:堆的实现(C实现)
个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》 文章目录 一、堆二、实现思路1. 结构的定义2. 堆的构建 (HeapInit)3. 堆的销毁 (HeapDestroy)4. 堆的插入 (HeapPush)5. 堆的删除 (HeapPop)6. 取堆顶的数据 (HeapTop)7. 堆的数据个数 (HeapSize…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...