一、关于ORM 

ORM 是啥呀

ORM 就是用 面向对象 的方式,把数据库里的数据还有它们之间的关系映射起来~就好像给数据库和面向对象之间搭了一座小桥梁🎀

对应关系大揭秘

面向对象和数据库里的东西,有超有趣的对应呢👇

  •  → 数据库里的 
    就像类是个小模具,能做出好多实例对象~表也是数据库里存数据的小容器呀,存着好多记录哒🥰
  • 属性 → 表的 字段
    属性是类里描述东西的小特性,字段就是表里面每一列的小身份,规定了存啥样的数据哟~像 “姓名”“年龄” 这种✨
  • 方法 → 对数据的 操作
    方法是类里能做的小功能,比如 “计算”“修改”~对应到数据库里,就是对数据增删查改这些操作啦,像给数据换件新衣服一样👗
  • 实例对象 → 表的 记录
    实例对象是类造出来的具体 “小家伙”,记录就是表里面一行一行的数据~比如一条学生信息,就是一个可爱的小记录呀📝

ORM 超棒的好处呀

用 ORM 来操作数据库(增删查改),不用写 SQL 语句,靠面向对象的代码就好啦,好处多多哒🥳

  • 降低难度
    不用费劲记复杂的 SQL 语法啦,用熟悉的面向对象代码,像玩游戏一样操作数据库,简单又快乐🎮
  • 减少失误
    代码更规整,不容易写错~就像走在铺好的小路上,不容易摔跤出错哟👣
  • 兼容多种数据库
    不管是 MySQL、PostgreSQL,还是 MariaDB、Sqlite3 这些数据库小伙伴,ORM 都能友好相处~不用为换数据库重新学一堆新东西,超省心哒💖

二、创建Model 

class Feedback(models.Model) 这行代码,就是在定义一个 数据库表的 “蓝图” 。在 Django 里,继承 models.Model 的类,会对应数据库中的一张表,用来存数据~

1. 类定义
class Feedback(models.Model):  # 数据库中: 表

  • class Feedback:定义了一个叫 Feedback 的类,它就像一个 “模具”,决定了数据库表长啥样。
  • (models.Model):继承 Django 提供的 models.Model 类,这样 Django 才会把这个类识别成数据库模型,帮我们和数据库打交道~
  • 注释 # 数据库中: 表:说明这个类对应数据库里的一张表,表名默认是小写的类名(比如这里可能对应 feedback 表,Django 会自动处理命名规则 )。

2. 字段定义(对应数据库的列)

下面这些代码,是给表定义 字段(列) ,规定存啥数据、怎么存~

quality = models.IntegerField('商品质量', default=1)  # 数据库: 字段

  • quality:是字段名,你可以理解成 “列的名字”,存商品质量相关的数据。
  • models.IntegerField:说明这个字段存 整数 类型的数据(比如 1、2、3… 用来打分很方便 )。
  • '商品质量':是给这个字段起的 “中文别名”,方便看代码时知道它干啥用的(数据库里实际存的是 quality ,但开发时看别名更直观 )。
  • default=1:如果创建数据时没给这个字段赋值,就默认填 1 (比如用户没打分,默认给 1 分 )。

同理,下面这几个字段逻辑差不多:

attitude = models.IntegerField('客服态度', default=1)  # 数据库: 字段
speed = models.IntegerField('物流速度', default=1)  # 数据库: 字段

  • attitude 存 “客服态度” 的整数评分,speed 存 “物流速度” 的整数评分,默认都是 1 分~

text = models.TextField('评论内容', max_length=150, default="")  # 数据库: 字段

  • text:字段名,存用户的评论内容。
  • models.TextField:存 长文本 (比如用户写的一段评价 )。
  • '评论内容':中文别名,方便理解。
  • max_length=150:限制最多写 150 个字符,避免评论太长~
  • default="":没写评论的话,默认存空字符串。

anonymous = models.BooleanField('是否匿名', default=True)  # 数据库: 字段

  • anonymous:字段名,存 “是否匿名” 的状态。
  • models.BooleanField:存 布尔值 (True 或 False ,也就是 “是” 或 “不是” )。
  • '是否匿名':中文别名。
  • default=True:默认 “匿名”(创建数据时,没选的话就默认匿名 )。

3. 普通属性(和数据库无关)
name: str = 'bf'  # 普通的属性
objects: models.QuerySet  # 普通的属性

   Python 的 : 是类型注解

  • name: str = 'bf':这是 普通的类属性 ,和数据库表的字段没关系!它就是这个 Feedback 类里的一个变量,存个字符串 'bf ' ,可能是开发时临时用的,不会同步到数据库里~
  • objects: models.QuerySet:也是普通属性(不过实际开发中,Django 会自动给模型类加 objects ,用来操作数据库,比如查询数据。这里提前标注类型,让代码更清晰 ),同样和数据库表的结构无关,是 Python 代码里用的~

models.QuerySet 就像一个 魔法小篮子 🧺,专门装从数据库里 “捞” 出来的宝贝数据哟~

它超能干的!✨

  1. 挑挑拣拣 🔍
    比如想找出所有 “商品质量” 大于 3 分的反馈?
    喊它一声:Feedback.objects.filter(quality__gt=3)
    它就会变出一个装着符合条件数据的小篮子,超乖~

  2. 排排坐 🔄
    想按 “物流速度” 从快到慢排好队?
    告诉它:Feedback.objects.order_by('-speed')
    它就会把数据整整齐齐排好,像小士兵一样~

  3. 算一算 🧮
    想知道大家给的 “客服态度” 平均分?
    拜托它:Feedback.objects.aggregate(Avg('attitude'))
    它立马算出结果,像个小计算器~

小秘密哦 🤫

  • 懒羊羊属性 😴:你让它准备篮子时,它才不着急去找数据呢~ 等到你真的要 “看” 里面的东西(比如遍历、打印),它才嗖地一下跑去数据库拿,超会摸鱼~
  • 连环魔法 🔗:可以让它先挑拣再排序,比如 filter(...).order_by(...),像玩积木一样拼操作,超灵活~

总之呀,QuerySet 就是帮我们和数据库 “对话” 的小可爱 🗣️,想要啥数据,跟它说一声就好啦~ 是不是超棒!🥳

总结一下

  • 这个 Feedback 类对应数据库里一张表,存用户反馈数据(商品质量、客服态度、物流速度评分,评论内容,是否匿名 )。
  • 继承 models.Model 后,Django 会帮我们把类转换成数据库表,字段对应表的列,不用手动写 SQL 建表啦~
  • 普通属性(像 name 、objects )是 Python 代码里自己用的,和数据库表结构没关系~

三、迁移数据库 

迁移是干啥哒?

迁移(migrations)就像个 “代码→数据库” 的翻译官~💬
把咱们写的 Model 代码(比如之前的 Feedback 类),变成数据库能听懂的 “指令”,让数据库真的长出对应的表、字段!

简单说:把 Python 里的模型设计,同步到真实数据库里生效~ ✨

四大迁移命令

1. makemigrations 👉 写 “迁移剧本”

makemigrations  基于模型的修改创建迁移。

  • 作用:当你改了 Model(比如新增字段、改默认值),它会帮你写一个 “迁移剧本”📝
    就像记录:“这次要给数据库表加个新字段啦~”“那个字段默认值要变哟~”
  • 举例:
    你给 Feedback 加了个 phone = models.CharField('电话', max_length=20),跑 makemigrations,它就生成一个包含 “新增 phone 字段” 的迁移文件!

2. showmigrations 👉 看 “迁移进度”

showmigrations  列出项目的迁移和迁移的状态。

  • 作用:查看所有迁移文件的状态~ 👀
    能看到哪些迁移已经 “applied(应用到数据库了)”,哪些还 “ pending(等着执行)”
  • 场景:
    想知道 “之前改的模型同步到数据库没?” 跑它就知道啦!像查快递进度一样~

3. sqlmigrate 👉 看 “翻译后的 SQL”

sqlmigrate  展示迁移使用的 SQL 语句。

  • 作用:把 “迁移剧本” 翻译成数据库能懂的 SQL 语句~(比如 CREATE TABLEALTER TABLE 这些)
    相当于让你 “偷看” 迁移背后的 SQL 魔法咒语!🪄
  • 用法:
    比如有个迁移文件 0001_initial.py,跑 sqlmigrate 你的应用名 0001,就能看到它要执行哪些 SQL~

4. migrate 👉 执行 “迁移剧本”

migrate  负责应用和撤销迁移。

  • 作用:真正把 “迁移剧本” 应用到数据库!让修改 生效~ ✅
    也能撤销迁移(比如回退到之前的版本)
  • 常用场景:
    • 第一次同步模型:migrate 会创建所有表
    • 改了模型后:先 makemigrations 写剧本,再 migrate 执行剧本,数据库就跟着变啦~

简化命令(pdm 玩家专属!)

pdm run init

  • 这是用 pdm 包管理工具时,简化的 “一键迁移” 命令~ 🚀
    可能背后帮你自动执行 makemigrations + migrate 这些步骤(具体看项目配置),让你少敲命令,超省心!

迁移流程小剧场🎬

假设你新建了 Feedback 模型:

  1. 写好 Model 代码 → 跑 makemigrations → 生成 “创建 Feedback 表” 的迁移文件
  2. 跑 migrate → 数据库执行 SQL,真的创建出 feedback 表!
  3. 后来你给 Feedback 加了个字段 → 再跑 makemigrations(生成 “加字段” 的迁移文件)→ 跑 migrate(数据库表真的多了这个字段)

manage.py 是啥

manage.py 是 Django 项目创建时就自带的一个 Python 脚本。它封装了很多常用的管理命令,你不需要去记那些命令具体在哪个模块,只要通过 manage.py ,再加上对应的子命令,就能完成各种操作。比如:

  • 创建新的应用:可以运行 python manage.py startapp 应用名 ,就像变魔法一样,帮你快速创建一个新的 Django 应用,里面自动生成一些基础的文件结构。
  • 启动开发服务器:使用 python manage.py runserver ,就能启动本地的开发服务器,方便你在开发过程中预览项目效果,不用手动去配置服务器相关的复杂操作。

为什么要通过 manage.py 执行 migrate

migrate 这个子命令,作用是把前面提到的迁移文件应用到数据库中,让数据库的结构和你的模型定义保持一致。

manage.py 知道整个 Django 项目的配置信息,比如数据库连接配置、项目里有哪些应用等。当你运行 python manage.py migrate 时:

  • 识别配置:它会读取项目的 settings.py 文件,了解到你使用的是哪种数据库(是 MySQL 、PostgreSQL 还是 SQLite 等 ),以及数据库的连接信息。这样它就能知道要把迁移应用到哪个数据库上。
  • 定位迁移文件:它会遍历项目里所有应用,找到那些通过 makemigrations 命令生成的迁移文件,清楚哪些迁移还没有应用到数据库中。
  • 执行迁移:根据迁移文件的顺序,按照正确的步骤把迁移应用到数据库,完成数据库结构的更新,比如创建表、修改字段等操作。

举个超形象的例子🤩:

把 Django 项目比作一个 “魔法城堡”,manage.py 就是城堡的 “大总管”,migrate 是它的一个 “魔法指令”。

当你喊出 python manage.py migrate ,大总管就会拿着城堡的 “地图”(配置信息),找到那些 “魔法卷轴”(迁移文件),然后按照卷轴上的指示,在城堡的 “宝物库”(数据库)里施展魔法,让宝物库的布局(数据库结构)和城堡主人(开发者)的想法一致~是不是很好理解啦😉。

四、 Django View 里操作 Model 的代码 

「数据入库小剧场」🎬

整体干啥的?

把用户 / 前端传来的数据,装进 Feedback 模型里,然后 “存进数据库” !就像把零散的乐高零件,拼成一个完整的模型,再放进展示柜~

1. obj = Feedback()
  • 这行是 “创建一个空的 Feedback 数据对象” ~
    Feedback 是咱们定义的模型类(像个模具),obj 就是用模具做出来的 空数据盒子 ,等着装数据啦~
  • 类比:用 “Feedback 模具” 捏一个空白的小泥人,后面要给它填五官、衣服~

2. obj.quality = data['quality']
  • 这行是 “给 obj 的 quality 字段赋值” ~
    • obj.quality:对应模型里的 quality 字段(商品质量评分)。
    • data['quality']假设 data 是前端 / 用户传来的字典数据(比如表单、API 请求),这里取 quality 对应的值,塞给 obj
    • 类比:给小泥人画眼睛,眼睛的颜色从 data 里选~

3. obj.attitude = data['attitude']
  • 同理!给 obj 的 attitude 字段(客服态度评分)赋值~
  • 继续给小泥人画嘴巴,嘴巴的形状从 data 里拿~

4. obj.speed = data['speed']
  • 给 obj 的 speed 字段(物流速度评分)赋值~
  • 给小泥人穿衣服,衣服的样式从 data 里挑~

5. obj.text = data['text']
  • 给 obj 的 text 字段(评论内容)赋值~
  • 给小泥人写名字,名字内容从 data 里取~

6. obj.anonymous = data['anonymous']
  • 给 obj 的 anonymous 字段(是否匿名)赋值~
  • 决定小泥人要不要戴 “匿名面具”,面具状态从 data 里拿~

7. obj.save() # 入库
  • 这行是 “把 obj 存进数据库” !
    前面给 obj 填了所有字段,现在调用 save() 方法,Django 就会帮我们把这个 obj 转换成 数据库的一条记录 ,永久保存~
  • 类比:把拼好的乐高模型、画好的小泥人,放进 “数据库展示柜” 里啦!

小总结(剧情回顾)

用 Feedback() 造一个空数据盒子 obj 

→ 从 data 里把数据一个个塞进 obj 的字段里

→  调用 save() 把 obj 存进数据库~

五、Django Admin 关联 Model 的完整流程 

让你的模型在后台 “可视化管理”~ 就像给模型办一张 “后台通行证”🎫

核心目的

Django Admin 是 Django 自带的 可视化后台管理工具 !把 Model 注册到 Admin 后,就能在后台页面里 直观地增删改查数据 ,不用写 SQL 或自己做页面~

比如你做了个 Feedback 模型(存用户反馈),注册到 Admin 后,就能在后台像用 Excel 一样管理这些数据啦!

注册 Model 到 Admin 的步骤

1. 准备工作:确保 App 已加入项目

在项目的 settings.py 里,你的 App(比如 beifan )要在 INSTALLED_APPS 里~ 否则 Django 找不到你的模型!

INSTALLED_APPS = [...'yifei',  # 你的 App 名称...
]

2. 写 Admin 注册代码(关键!)

在你的 App 目录下(比如 beifan/admin.py ),写下面的代码:

from django.contrib import admin
from .models import Feedback  # 导入你的模型# 方式1:装饰器注册(推荐!)
@admin.register(Feedback)
class FeedbackAdmin(admin.ModelAdmin):# 这里可以定制后台显示的样子,比如列表显示哪些字段、搜索框、过滤条件等list_display = ('quality', 'attitude', 'speed', 'text', 'anonymous')  # 列表页显示的字段search_fields = ('text',)  # 搜索框,搜评论内容list_filter = ('anonymous',)  # 过滤条件,按是否匿名筛# 方式2:传统注册(和装饰器选一种即可)
# admin.site.register(Feedback, FeedbackAdmin)

代码拆解

  • @admin.register(Feedback):这是个 装饰器 ,作用是 “把 Feedback 模型交给 FeedbackAdmin 管理”~
  • class FeedbackAdmin(admin.ModelAdmin):继承 admin.ModelAdmin ,可以定制后台的显示、操作逻辑。
    • list_display:后台列表页显示哪些字段(像表格的列)。
    • search_fields:加个搜索框,搜哪些字段。
    • list_filter:侧边栏加过滤条件,方便筛数据。

3. 运行开发服务器,登录后台
  • 启动服务器:python manage.py runserver
  • 访问后台:浏览器打开 http://127.0.0.1:8000/admin ,用超级用户(superuser)登录(没有的话用 python manage.py createsuperuser 创建)。

4. 享受可视化管理!

登录后,左边侧边栏会出现你的 Feedback 模型~ 点进去就能:

  • 点 Add 按钮 → 像填表单一样新增数据!
  • 列表页能看到所有数据,还能搜索、过滤~
  • 点每条数据 → 编辑、删除都可以!

Django Admin 界面:

  • 左边 YIFEI分组下有 Feed backs → 说明 Feedback 模型已成功注册!
  • 绿色提示 The feedback "Feedback object (4)" was added successfully. → 刚新增了一条数据,成功入库~
  • 列表里的 Feedback object (4) → 是一条数据,因为没定制 __str__ 方法,默认显示 模型名 object (ID) 。可以在模型里加一行让它更友好:
class Feedback(models.Model):# 你的字段...def __str__(self):return f"反馈{self.id}:{self.text[:10]}"  # 显示 ID 和评论前10个字

进阶定制(可选玩)

想让后台更炫酷?可以继续加这些配置:

@admin.register(Feedback)
class FeedbackAdmin(admin.ModelAdmin):list_display = ('quality', 'attitude', 'speed', 'text', 'anonymous', 'created_time')list_per_page = 20  # 每页显示20条readonly_fields = ('created_time',)  # 某些字段只读(比如自动生成的时间)fieldsets = (  # 分组显示编辑页的字段('评分信息', {'fields': ('quality', 'attitude', 'speed')}),('评论信息', {'fields': ('text', 'anonymous')}),)

这样后台编辑页面会分组显示字段,更清晰!

总结流程

  1. 确保 App 在 INSTALLED_APPS →
  2.  在 admin.py 用 @admin.register 注册模型 + 定制显示 → 
  3. 启动服务器,登录后台 →
  4. 愉快地增删改查!

整个过程就像:给你的模型办一张 “后台 VIP 卡” ,让它能在 Django Admin 里被可视化管理🎉

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入 Go 底层原理(四):GMP 模型深度解析

1. 引言在上一篇文章中,我们宏观地了解了 Go 的调度策略。现在,我们将深入到构成这个调度系统的三大核心组件:G、M、P。理解 GMP 模型是彻底搞懂 Go 并发调度原理的关键。本文将详细解析 G、M、P 各自的职责以及它们之间是如何协同工作的。2.…

AI赋能测试:技术变革与应用展望

AI 在测试中的应用:技术赋能与未来展望 目录 AI 在测试中的应用:技术赋能与未来展望 1. 引言 1.1 测试在软件开发中的重要性 1.2 AI 技术如何改变传统测试模式 1.3 文章结构概述 2. AI 在测试中的核心应用场景 2.1 自动化测试优化 2.1.1 智能测…

Mujoco(MuJoCo,全称Multi - Joint dynamics with Contact)一种高性能的物理引擎

Mujoco(MuJoCo,全称Multi - Joint dynamics with Contact)是一种高性能的物理引擎,主要用于模拟多体动力学系统,广泛应用于机器人仿真、运动学研究、人工智能等领域。以下是关于Mujoco仿真的一些详细介绍: …

winform-窗体应用的功能介绍(部分)

1--Point实现在窗口(Form)中一个按钮(控件)的固定位置(所在位置)一个按钮(控件)的位置一般是固定的,另一个按钮在窗口中位置是随机产生的Location属性:Location new Point(X,Y);在C#的Winform应用程序里,Button控件的鼠标悬标悬浮事件是不存在内置延迟时间的。当鼠标指针进入按…

最新Windows11系统镜像,23H2 64位ISO镜像

Windows 11 主要分为 Consumer Editions(消费者版)和 Business Editions(商业版)两大类别 。消费者版主要面向家庭和个人用户,商业版则侧重于企业和商业用户。这两大类别中存在部分重叠的版本,比如专业版和…

linux基本系统服务——DNS服务

一、DNS域名解析原理DNS&#xff0c;Domain Name System&#xff0c;域名系统&#xff1a;在互联网中由大量域名解析服务器共同提供的一整套关于“域名 <--> IP地址”信息查询的数据系统!!!! C/S架构&#xff1a;DNS服务端监听UDP 53端口&#xff08;处理客户端查询&…

数据处理和统计分析——08 apply自定义函数

1 apply()函数 1.1 apply()函数简介 Pandas提供了很多数据处理的API&#xff0c;但当提供的API不能满足需求的时候&#xff0c;需要自己编写数据处理函数, 这个时候可以使用apply()函数&#xff1b;apply()函数可以接收一个自定义函数&#xff0c;可以将DataFrame的行或列数据传…

C++冰箱管理实战代码

基于C++的冰箱管理实例 以下是一些基于C++的冰箱管理实例示例,涵盖不同功能场景,每个示例聚焦特定实现点,代码可直接扩展或整合到项目中。 示例1:基础冰箱类定义 class Refrigerator { private:int capacity;std::vector<std::string> items; public:Refrigerator(…

【Python】【数据分析】Python 数据分析与可视化:全面指南

目录1. 环境准备2. 数据处理与清洗2.1 导入数据2.2 数据清洗示例&#xff1a;处理缺失值示例&#xff1a;处理异常值2.3 数据转换3. 数据分析3.1 描述性统计3.2 分组分析示例&#xff1a;按年龄分组计算工资的平均值3.3 时间序列分析4. 数据可视化4.1 基本绘图示例&#xff1a;…

【AI】AIService(基本使用与指令定制)

【AI】AIService(基本使用与指令定制) 文章目录【AI】AIService(基本使用与指令定制)1. 简介2. AIService2.1 引入依赖2.2 编写AIService接口2.3 测试代码3. 指令定制3.1 系统提示词3.2 用户提示词1. 简介 AIService可以被视为应用程序服务层的一个组件&#xff0c;提供对应的…

AAAI赶稿后的心得

总结 已经第三次和老师们一起赶稿了&#xff0c;但是还是纰漏重重&#xff0c;每次都被我的垃圾写作给吓到。每次都手忙脚乱找不到重点&#xff0c;唉&#xff0c;我大概这辈子都成为不了郭老师&#xff1a; 自己把故事先捋清楚&#xff1a; 所有的东西都要抽象出来&#xff0c…

书籍推荐算法研究

## 项目概述本项目是一个完整的书籍推荐系统第五版(Complete Book Recommendation System V5),采用混合推荐策略,能够处理6种不同的用户场景,提供智能化的书籍推荐服务。## 系统架构### 核心设计思路系统采用**混合推荐策略**,结合了以下几种推荐算法:1. **协同过滤推荐…

工具自动生成Makefile

cmake 基础 cmake主要是生成Makefile&#xff0c;以便工程管理&#xff0c;只需要编写CMakeLists.txt安装camkesudo apt install cmake 安装cmake camke --version 查看cmake版本 sudo apt upgrade cmake 升级cmake源码隔离 在工程文件下创建一个build文件&…

Java项目:基于SSM框架实现的校园活动资讯网管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】

摘 要 使用旧方法对校园活动资讯进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在校园活动资讯的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的校园活动资讯网…

关于echarts的性能优化考虑

作为资深前端工程师&#xff0c;在处理 ECharts 性能问题时&#xff0c;核心思路是减少渲染压力、优化数据处理、避免不必要的计算&#xff0c;尤其在大数据量&#xff08;万级以上&#xff09;、高频交互或多图表场景下&#xff0c;性能优化尤为关键。以下是实战中验证过的有效…

汽车EDI:Vitesco EDI 项目案例

Vitesco Technologies&#xff08;纬湃科技&#xff09;脱胎于大陆集团的动力总成部门&#xff0c;是一家于2021年上市的全球领先汽车技术供应商。公司专注于电动出行领域&#xff0c;提供电驱动系统、电池管理系统、功率电子及热管理等关键技术解决方案。同时&#xff0c;其业…

译|Netflix 技术博客:一个利用视觉-语言模型和主动学习高效构建视频分类器的框架

本篇介绍了Netflix的视频标注器&#xff08;VA&#xff09;&#xff0c;一个利用视觉-语言模型和主动学习的交互式框架。其技术亮点在于通过人机协作系统&#xff0c;结合零样本能力和主动学习&#xff0c;引导领域专家高效标注视频数据&#xff0c;显著提升了模型样本效率和平…

前端应用权限设计面面观

目录 1. 权限设计:前端为啥要操这份心? 2. 权限模型的“内功心法”:RBAC 和 ABAC RBAC:简单粗暴的角色分配 ABAC:灵活但烧脑的属性控制 3. 权限数据的“物流体系”:从后端到前端的旅程 权限数据从哪儿来? 权限数据咋存? 权限数据咋用? 4. 路由守卫:权限的“第…

Javaweb————Apache Tomcat服务器介绍及Windows,Linux,MAC三种系统搭建Apache Tomcat

&#x1f3cd;️&#x1f3cd;️&#x1f3cd;️第一部分&#xff1a;什么是服务器&#xff1f; 服务器是远程的一个电脑,里面安装服务器程序监听对应的端口对外提供服务&#xff0c;可以根据用户的请求去获取对应的数据并返回给调用方。 &#x1f3cd;️&#x1f3cd;️&#…

winsock socket通讯为什么UDP服务器无法获取客户端IP?

针对VB6 Winsock开发中UDP服务器无法获取客户端IP的问题&#xff0c;以下是系统性排查方案&#xff1a; 一、基础协议特性确认UDP无连接特性 Winsock的UDP协议本身是无连接的&#xff0c;需通过GetPeerName方法主动获取对端IP&#xff0c;而非自动存储。数据接收处理 必须在Dat…