当前位置: 首页 > news >正文

Django+Vue3全栈开发实战:从零搭建博客系统

在这里插入图片描述

文章目录

    • 1. 开发环境准备
    • 2. 创建Django项目与配置
    • 3. 设计数据模型与API
    • 4. 使用DRF创建RESTful API
    • 5. 创建Vue3项目与配置
    • 6. 前端页面开发与组件设计
    • 7. 前后端交互与Axios集成
    • 8. 项目优化与调试
    • 9. 部署上线
    • 10. 总结与扩展
      • 10.1 项目总结
        • 10.1.1 技术栈回顾
        • 10.1.2 项目亮点
      • 10.2 扩展方向
        • 10.2.1 功能扩展
        • 10.2.2 技术扩展
      • 10.3 最佳实践
        • 10.3.1 后端最佳实践
        • 10.3.2 前端最佳实践
      • 10.4 常见问题与解决方案
        • 10.4.1 后端常见问题
        • 10.4.2 前端常见问题
      • 10.5 参考资料与扩展阅读

1. 开发环境准备

# 检查Python版本
python --version  # 要求3.8+# 安装虚拟环境工具
pip install virtualenv# 检查Node.js版本
node -v  # 要求16+

2. 创建Django项目与配置

# 创建项目目录
mkdir blog_project && cd blog_project# 创建虚拟环境
virtualenv venv
source venv/bin/activate  # Linux/Mac
venv\Scripts\activate    # Windows# 安装Django
pip install django# 创建项目
django-admin startproject backend
cd backend# 创建应用
python manage.py startapp blog

配置settings.py:

INSTALLED_APPS = [...'rest_framework','corsheaders','blog.apps.BlogConfig'
]MIDDLEWARE = [...'corsheaders.middleware.CorsMiddleware',
]CORS_ALLOW_ALL_ORIGINS = True

3. 设计数据模型与API

models.py:

from django.db import models
from django.contrib.auth.models import Userclass Post(models.Model):title = models.CharField(max_length=200)content = models.TextField()author = models.ForeignKey(User, on_delete=models.CASCADE)created_at = models.DateTimeField(auto_now_add=True)updated_at = models.DateTimeField(auto_now=True)def __str__(self):return self.title

执行迁移:

python manage.py makemigrations
python manage.py migrate

4. 使用DRF创建RESTful API

serializers.py:

from rest_framework import serializers
from .models import Postclass PostSerializer(serializers.ModelSerializer):author = serializers.ReadOnlyField(source='author.username')class Meta:model = Postfields = '__all__'

views.py:

from rest_framework import viewsets
from .models import Post
from .serializers import PostSerializerclass PostViewSet(viewsets.ModelViewSet):queryset = Post.objects.all()serializer_class = PostSerializerdef perform_create(self, serializer):serializer.save(author=self.request.user)

urls.py:

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from blog import viewsrouter = DefaultRouter()
router.register(r'posts', views.PostViewSet)urlpatterns = [path('api/', include(router.urls)),
]

5. 创建Vue3项目与配置

npm init vue@latest frontend
cd frontend
npm install
npm run dev

安装必要依赖:

npm install axios vue-router@4 pinia

配置main.js:

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
import router from './router'const app = createApp(App)
app.use(createPinia())
app.use(router)
app.mount('#app')

6. 前端页面开发与组件设计

PostList.vue组件示例:

<template><div class="post-list"><div v-for="post in posts" :key="post.id" class="post-card"><h3>{{ post.title }}</h3><p>{{ post.content.substring(0, 100) }}...</p><div class="meta"><span>作者:{{ post.author }}</span><span>发布时间:{{ formatDate(post.created_at) }}</span></div></div></div>
</template><script setup>
import { ref, onMounted } from 'vue'
import axios from 'axios'const posts = ref([])const fetchPosts = async () => {try {const response = await axios.get('http://localhost:8000/api/posts/')posts.value = response.data} catch (error) {console.error('获取文章失败:', error)}
}const formatDate = (dateString) => {return new Date(dateString).toLocaleDateString()
}onMounted(() => {fetchPosts()
})
</script><style scoped>
.post-list {max-width: 800px;margin: 0 auto;
}
.post-card {background: #fff;border-radius: 8px;padding: 20px;margin-bottom: 20px;box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
</style>

7. 前后端交互与Axios集成

创建axios实例:

// src/utils/http.js
import axios from 'axios'const instance = axios.create({baseURL: 'http://localhost:8000/api',timeout: 5000,headers: {'Content-Type': 'application/json'}
})export default instance

使用Pinia状态管理:

// stores/postStore.js
import { defineStore } from 'pinia'
import http from '@/utils/http'export const usePostStore = defineStore('post', {actions: {async createPost(postData) {try {const response = await http.post('/posts/', postData)return response.data} catch (error) {throw error.response.data}}}
})

8. 项目优化与调试

配置Django静态文件:

# settings.py
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'

Vue生产构建:

npm run build

配置WhiteNoise中间件:

MIDDLEWARE = ['whitenoise.middleware.WhiteNoiseMiddleware',...
]STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

9. 部署上线

使用Gunicorn部署Django:

pip install gunicorn
gunicorn backend.wsgi:application --bind 0.0.0.0:8000

配置Nginx:

server {listen 80;server_name example.com;location /api {proxy_pass http://localhost:8000;proxy_set_header Host $host;}location / {root /path/to/vue/dist;try_files $uri $uri/ /index.html;}
}

10. 总结与扩展

10.1 项目总结

在本项目中,我们通过Django和Vue3实现了一个全栈博客系统,涵盖了从前端到后端的完整开发流程。以下是项目的主要技术点总结:

10.1.1 技术栈回顾
  1. 后端技术栈

    • Django:作为核心框架,提供了强大的ORM、路由管理、模板引擎等功能。
    • Django REST Framework (DRF):用于快速构建RESTful API,支持序列化、视图集、权限控制等功能。
    • 数据库:使用SQLite作为开发数据库,支持无缝迁移到MySQL或PostgreSQL。
    • 身份验证:通过Django内置的User模型和DRF的TokenAuthentication实现用户认证。
    • CORS:通过django-cors-headers解决跨域问题,确保前后端分离架构的正常运行。
  2. 前端技术栈

    • Vue3:作为前端框架,提供了组合式API、响应式数据绑定、组件化开发等特性。
    • Pinia:用于状态管理,替代Vuex,提供更简洁的API和TypeScript支持。
    • Axios:用于发送HTTP请求,与后端API进行数据交互。
    • Vue Router:实现前端路由管理,支持动态路由、嵌套路由等功能。
    • Element Plus:作为UI组件库,提供丰富的组件和样式,加速页面开发。
  3. 开发工具

    • VS Code:作为主要开发工具,配合插件(如Vetur、ESLint、Prettier)提升开发效率。
    • Postman:用于API调试和测试。
    • Git:用于版本控制,支持团队协作开发。
  4. 部署方案

    • Nginx:作为反向代理服务器,处理静态文件请求和负载均衡。
    • Gunicorn:作为WSGI服务器,用于部署Django应用。
    • Docker:通过容器化技术简化部署流程,支持跨平台运行。
10.1.2 项目亮点
  1. 前后端分离架构

    • 前端和后端完全解耦,通过API进行数据交互,提高了开发效率和可维护性。
    • 前端可以独立部署,支持多平台(如Web、移动端)共享同一套API。
  2. 模块化设计

    • 后端通过Django的App机制将功能模块化,便于扩展和维护。
    • 前端通过Vue3的组件化开发,实现了高内聚、低耦合的代码结构。
  3. 响应式设计

    • 前端页面采用响应式布局,适配不同设备(PC、平板、手机)。
    • 使用Element Plus的栅格系统和组件,快速构建美观的UI。
  4. 性能优化

    • 后端通过DRF的分页、缓存、查询优化等技术提升API性能。
    • 前端通过懒加载、代码分割、图片压缩等技术减少页面加载时间。
  5. 安全性

    • 后端通过Django的CSRF保护、XSS防护、SQL注入防护等机制确保数据安全。
    • 前端通过Axios的请求拦截器和响应拦截器处理错误和权限验证。

10.2 扩展方向

10.2.1 功能扩展
  1. 用户认证与权限管理

    • 实现基于JWT(JSON Web Token)的身份验证,支持无状态认证。
    • 添加角色管理功能(如管理员、普通用户),实现细粒度的权限控制。
  2. 文件上传与存储

    • 支持用户上传头像、文章封面等文件。
    • 使用云存储服务(如AWS S3、阿里云OSS)存储静态文件。
  3. 评论与点赞功能

    • 实现文章评论功能,支持嵌套评论和分页加载。
    • 添加点赞功能,记录用户的点赞行为。
  4. 搜索与过滤

    • 实现全文搜索功能,使用Elasticsearch或Django的django-filter库。
    • 支持按标签、分类、时间等条件过滤文章。
  5. 实时通知

    • 使用WebSocket实现实时通知功能(如新评论、点赞提醒)。
    • 集成第三方通知服务(如Firebase Cloud Messaging)。
  6. 国际化与多语言支持

    • 使用Django的django-i18n实现后端多语言支持。
    • 使用Vue3的vue-i18n实现前端多语言切换。
10.2.2 技术扩展
  1. TypeScript支持

    • 将Vue3项目迁移到TypeScript,提升代码的可维护性和类型安全性。
    • 配置ESLint和Prettier,统一代码风格。
  2. GraphQL集成

    • 使用GraphQL替代RESTful API,提供更灵活的数据查询能力。
    • 集成Apollo Client作为前端GraphQL客户端。
  3. 微服务架构

    • 将单体应用拆分为多个微服务(如用户服务、文章服务、评论服务)。
    • 使用Docker和Kubernetes实现容器化部署和动态扩缩容。
  4. Serverless架构

    • 将部分功能(如图片处理、邮件发送)迁移到Serverless平台(如AWS Lambda)。
    • 使用Vercel或Netlify部署前端应用。
  5. 自动化测试

    • 使用Pytest和Django的测试工具编写后端单元测试和集成测试。
    • 使用Jest和Vue Test Utils编写前端单元测试和组件测试。
  6. CI/CD集成

    • 使用GitHub Actions或GitLab CI实现持续集成和持续部署。
    • 配置自动化测试、代码检查和部署流程。

10.3 最佳实践

10.3.1 后端最佳实践
  1. 代码结构优化

    • 使用Django的App机制将功能模块化,避免单个App过于臃肿。
    • 将业务逻辑放在Service层,减少视图函数的复杂度。
  2. API设计规范

    • 遵循RESTful API设计原则,使用合适的HTTP方法和状态码。
    • 使用版本控制(如/api/v1/posts)确保API的兼容性。
  3. 数据库优化

    • 使用索引加速查询,避免全表扫描。
    • 使用select_relatedprefetch_related优化关联查询。
  4. 缓存机制

    • 使用Redis缓存频繁访问的数据(如文章列表、用户信息)。
    • 使用Django的缓存框架实现页面级缓存和片段缓存。
  5. 日志记录

    • 使用Python的logging模块记录关键操作和错误信息。
    • 配置日志轮转和分级存储,便于问题排查。
10.3.2 前端最佳实践
  1. 组件化开发

    • 将页面拆分为多个可复用的组件,提高代码的可维护性。
    • 使用插槽(Slot)和Props实现组件的灵活配置。
  2. 状态管理

    • 使用Pinia集中管理全局状态,避免组件间直接传递数据。
    • 将异步操作(如API请求)放在Store中,减少组件的复杂度。
  3. 性能优化

    • 使用懒加载和代码分割减少首屏加载时间。
    • 使用v-ifv-show优化DOM渲染性能。
  4. 错误处理

    • 使用Axios的拦截器统一处理请求错误和响应错误。
    • 在组件中显示友好的错误提示,提升用户体验。
  5. SEO优化

    • 使用Vue Router的meta标签设置页面标题和描述。
    • 使用SSR(服务器端渲染)或预渲染技术提升SEO效果。

10.4 常见问题与解决方案

10.4.1 后端常见问题
  1. 跨域问题

    • 解决方案:使用django-cors-headers中间件,配置CORS_ALLOW_ALL_ORIGINS或白名单。
  2. 数据库迁移失败

    • 解决方案:检查模型定义是否正确,删除迁移文件并重新生成。
  3. 性能瓶颈

    • 解决方案:使用Django Debug Toolbar分析性能问题,优化查询和缓存。
  4. 安全性问题

    • 解决方案:启用Django的安全中间件,定期更新依赖库。
10.4.2 前端常见问题
  1. 页面加载慢

    • 解决方案:使用懒加载、代码分割、CDN加速等技术优化加载速度。
  2. 组件通信复杂

    • 解决方案:使用Pinia集中管理状态,减少组件间的直接通信。
  3. API请求失败

    • 解决方案:检查网络连接、API地址和请求参数,使用拦截器统一处理错误。
  4. 浏览器兼容性问题

    • 解决方案:使用Babel和PostCSS处理兼容性问题,测试主流浏览器。

10.5 参考资料与扩展阅读

  1. 官方文档

    • Django官方文档
    • Vue3官方文档
    • DRF官方文档
  2. 推荐书籍

    • 《Django for Beginners》
    • 《Vue.js设计与实现》
    • 《RESTful API设计指南》
  3. 在线课程

    • Django全栈开发实战
    • Vue3高级开发技巧
  4. 开源项目

    • Django博客系统
    • Vue3管理后台

相关文章:

Django+Vue3全栈开发实战:从零搭建博客系统

文章目录 1. 开发环境准备2. 创建Django项目与配置3. 设计数据模型与API4. 使用DRF创建RESTful API5. 创建Vue3项目与配置6. 前端页面开发与组件设计7. 前后端交互与Axios集成8. 项目优化与调试9. 部署上线10. 总结与扩展10.1 项目总结10.1.1 技术栈回顾10.1.2 项目亮点 10.2 扩…...

双重差分学习笔记

双重差分适用的研究场景&#xff1a; 研究某项政策或者冲击造成的影响 例如&#xff0c;某某小学在2024.12.12日颁布了小红花激励措施&#xff0c;我们要研究这项措施对学生成绩的影响&#xff0c;此时&#xff0c;就可以使用双重差分模型。 双重差分适用的数据类型&#xf…...

python组备赛笔记(基础篇)

小数输出 1、代码示例&#xff1a; print(jc,%.3f%fc) 输出格式&#xff1a; 890 86075.959 2、代码示例&#xff1a; print(f%.3f%b) 输出格式&#xff1a; 1.000 金字塔输出 1、代码示例&#xff1a; n 5 t * for i in range(1,n1):print(f{t*(2*i-1):^{2*n-1}}) fo…...

从零开始构建一个小型字符级语言模型的完整详细教程(基于Transformer架构)

最近特别火的DeepSeek,是一个大语言模型,那一个模型是如何构建起来的呢?DeepSeek基于Transformer架构,接下来我们也从零开始构建一个基于Transformer架构的小型语言模型,并说明构建的详细步骤及内部组件说明。我们以构建一个字符级语言模型(Char-Level LM)为例,目标是通…...

XUnity.AutoTranslator-Gemini——调用Google的Gemini API, 实现Unity游戏中日文文本的自动翻译

XunityAutoTranslator-Gemini-API 本项目是一个使用 Flask 框架和 Google Gemini GenAI 模型构建的 Web API 服务&#xff0c;用于将日文unity游戏文本翻译成简体中文。 日文游戏文本AI翻译API (基于Google Gemini) 本项目是一个使用 Flask 框架和 Google Gemini GenAI 模型…...

中文Build a Large Language Model (From Scratch) 免费获取全文

中文pdf下载地址&#xff1a;https://pan.baidu.com/s/1aq2aBcWt9vYagT2-HuxdWA?pwdlshj 提取码&#xff1a;lshj 原文、代码、视频项目地址&#xff1a;https://github.com/rasbt/LLMs-from-scratch 翻译工具&#xff1a;沉浸式翻译&#xff08;https://app.immersivetrans…...

DeepSeek 助力 Vue 开发:打造丝滑的瀑布流布局(Masonry Layout)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

C++:从拷贝构造函数到深浅拷贝

拷贝构造函数 当实例化一个新对象并使用同类型对其进行初始化时&#xff0c;会显式调用类的拷贝构造函数&#xff0c;拷贝构造函数写法&#xff1a;形参为const修饰的同类型类引用。拷贝构造函数有个需要注意的点&#xff0c;形参为何是只允许传递引用呢&#xff1f;原因在于若…...

Openssl之SM2加解密命令

### 1. 生成 SM2 私钥openssl genpkey -algorithm EC \-pkeyopt ec_paramgen_curve:sm2 \-out sm2_private_key.pem### 2. 从私钥导出 SM2 公钥openssl pkey -in sm2_private_key.pem \-pubout \-out sm2_public_key.pem### 3. 使用 SM2 公钥加密openssl pkeyutl -encrypt \-pu…...

Java集合框架之List接口详解

目录 一、List接口概述 二、List接口常见实现类 三、List接口特有方法: 1.元素操作 2. 查找元素位置 3. 子列表与不可变列表 四、List特有迭代器:ListIterator 1.特有的迭代方式 2.ListIterator接口中的常用方法: ⑴.void add(E e):在光标位置插入元素。(会移动…...

oracle apex post接口

日常记录 使用到了apex_json方式接收 、、、1 首先&#xff0c;接口通过body传递过来&#xff0c;成功接收到&#xff0c; 数据格式为 JSON_OBJECT_T l_json : JSON_OBJECT_T.parse(:body); 这里我用参数接收到 然后 里面是包含了 "data" 我用 继续接收到这个 l…...

【数据挖掘】--算法

【数据挖掘】--算法 目录&#xff1a;1. 缺失值和数值属性处理1缺失值处理&#xff1a; 2. 用于文档分类的朴素贝叶斯3. 分治法&#xff1a;建立决策树4. 覆盖算法建立规则5. 挖掘关联规则6. 线性模型有效寻找最近邻暴力搜索&#xff08;Brute-Force Search&#xff09;kd树&am…...

halcon机器视觉深度学习对象检测,物体检测

目录 效果图操作步骤软件版本halcon参考代码本地函数 get_distinct_colors()本地函数 make_neighboring_colors_distinguishable() 效果图 操作步骤 首先要在Deep Learning Tool工具里面把图片打上标注文本&#xff0c; 然后训练模型&#xff0c;导出模型文件 这个是模型 mod…...

英文字体:极简现代浓缩未来派科技海报标题排版无衬线字体 PODIUM Sharp Font

PODIUM Sharp 是 2012 年设计的 DUDU 字体的扩展版本。多年后&#xff0c;我决定通过添加新的母版和粗细来重建和开发这种字体。最后&#xff0c;PODIUM Sharp 由 234 种款式组成&#xff1a;从超压缩发际线到超扩展重度。 这个项目的主要目的是在我在旧波兰标本中发现的不同模…...

Java中JDK、JRE,JVM之间的关系

Java中的JDK、JRE和JVM是三个核心概念&#xff0c;其关系可概括为JDK > JRE > JVM&#xff0c;具体如下&#xff1a; 一、定义与作用 JDK&#xff08;Java Development Kit&#xff09; 定义&#xff1a;Java开发工具包&#xff0c;用于开发和编译Java程序。包含内容&…...

elasticsearch在windows上的配置

写在最前面&#xff1a; 上资源 第一步 解压&#xff1a; 第二步 配置两个环境变量 第三步 如果是其他资源需要将标蓝的文件中的内容加一句 xpack.security.enabled: false 不同版本的yaml文件可能配置不同&#xff0c;末尾加这个 xpack.security.enabled: true打开bin目…...

vscode 配置 Copilot 提示GHE.com连接失败

步骤一&#xff1a;打开设置并进入 settings.json 点击菜单栏中的 “文件” -> “首选项” -> “设置”。 在搜索设置栏中输入 “Copilot: Advanced”。 点击搜索结果下方的 “在 settings.json 中编辑” 链接&#xff0c;这会打开 settings.json 文件。 步骤二&#…...

Pycharm+CodeGPT+Ollama+Deepseek

首先&#xff0c;体验截图&#xff1a; 接着&#xff1a; 1、下载Ollama&#xff1a; Download Ollama on macOS 2、下载模型 以1.5b为例&#xff0c;打开命令行&#xff0c;输入: ollama run deepseek-r1:1.5b 3、Pycharm安装Code GPT插件 打开PyCharm&#xff0c;找到文…...

Unreal5从入门到精通之在编辑器中更新 UserWidgets

前言 在虚幻中创建越来越复杂和灵活的 UserWidget 蓝图时,一个问题是它们在编辑器中的外观与它们在游戏中的最终外观可能有很大不同。 库存面板示例 假设你想创建一个通用的库存显示小部件。我们可以在整个 UI 中使用它,无论我们需要在哪里显示某些内容。 标题,描述所显示…...

C语言修炼手册

目录 第一章 分支与循环语句 1. 悬空else问题 2. 循环输入问题 3. getchar缓冲区溢出问题 4. goto语句坑点 第二章 函数 1.为什么要有库函数 2.函数嵌套 3.链式访问 4.回调函数 5.函数递归 6.字符转换函数 7.模拟实现字符串拷贝strcpy 8.模拟实现字符串的长度s…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...