news 2026/9/15 8:36:16

用Python+Django构建大学生创新创业项目管理系统全流程实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Python+Django构建大学生创新创业项目管理系统全流程实战

每年三四月份,很多高校的创新创业项目申报季一到,学院教务老师的桌面就会被各种Excel表、Word申报书、微信聊天记录塞满。学生问“老师我改个题目重新提交行不行”,导师问“我名下这几个项目哪个还没交中期检查”,管理员手里拿着十多个不同版本的文件来回比对,最后统计结果还得靠人肉录入。我自己折腾过好几套高校管理系统之后,越来越确定一个判断:这类“项目申报—审批—过程管理—结题归档”的全流程管理系统,用 Python + Django 来做,其实是最省力气的路线。这篇文章就把我用 Django 开发大学生创新创业项目管理系统的完整思路、数据模型、核心代码和部署经验拆开讲一遍,包括我会在开发前先想清楚什么、每个模块怎么落地、上线时遇到过哪些坑,全部记录下来。项目代号 22113w31,不管你是做课程设计、毕业设计,还是真要在学院里落地一套系统,这套思路都能直接抄作业。

1. 项目背景与核心需求拆解

1.1 双创项目管理的真实痛点

大学生创新创业训练计划这类项目,流程链路其实很长:学生组建团队、找指导教师、撰写申报书、提交学院初审、安排专家评审、公示立项、签订任务书,然后进入周期可能长达一年的实施阶段,期间还要提交中期检查报告、结题报告、成果材料,最后学校组织结题验收。任何一个环节断掉,后面统计工作量的时候就麻烦。

我在不少学院看到的现状是:申报用Excel收集,审批靠邮件来回发,中期检查通过微信群里发文件,结题材料又用U盘拷给教务员。信息散落在不同的渠道里,出了问题只能挨个问。这个问题不是单点功能能解决的,而是需要一个能承载“项目生命周期”的系统,把所有人拉进同一个平台上操作。

所以这套创新创业项目管理系统的核心,不是做一个好看的页面,而是把流程理清楚。我在设计之前,先跟几个学院的教务老师聊过,也翻过学校历年的项目管理细则,最终把需求收敛成三个关键词:流程清晰、权限分明、记录可追溯。

1.2 角色权限模型的确定

系统里到底有哪几类人,是建模的起点。我见过一些管理系统把用户表做成一张大而全的表,字段堆了几十个,结果逻辑混乱。实际拆解下来,双创项目系统只需要四类角色:

  • 学生:发起申报,维护自己参与的项目,上传中期/结题材料。
  • 指导教师:审核学生申报,查看名下项目进度,填写指导记录。
  • 学院管理员:本院项目的初审、材料审核、数据统计。
  • 校级管理员:全局配置、专家评审组织、立项与结题终审、系统维护。

注意,这里没有做“专家评审”这个独立角色放在前端,因为专家通常是临时抽调的,更适合放进 Django Admin 后台,给评审专家开一个受限的 Admin 账号,引导评审页面用 Django Admin 加自定义视图来完成,这样既省一套前端,也符合实际使用场景。后面我会专门讲这块的设计。

1.3 核心业务流拆解

画完角色,接着要梳理业务流转。我习惯用状态机的方式去理解:一个项目从创建到结束,状态会沿着固定路径迁移。这里我梳理出了核心链路:

申报 → 导师审核 → 学院初审 → 专家评审 → 立项公示 → 中期检查 → 结题验收 → 归档

每一个箭头背后,都对应一个“谁在什么条件下、对什么数据、做什么操作”的规则。比如“导师审核通过”这个动作,只有项目第一指导教师能执行,而且只有在“状态=待导师审核”时才允许操作。这些规则如果不提前定义好,后面写 view 的时候就会各种补丁式 if 判断。

Django 在这类场景下的优势非常明显:ORM 管理数据模型、Auth 框架做用户认证、Admin 后台直接生成管理界面、Form/ModelForm 快速构建表单。学完基础语法之后,走一遍 Python 教程里的类、装饰器、ORM 查询,基本就能开工。我自己开发这个项目时,从搭建到完成第一版可演示的流程,前后只用了不到一周。

2. 技术方案选型与整体架构思路

2.1 为什么选择 Python + Django,而不是 Spring Boot 或者 Flask

被问得最多的一个问题:为什么不用 Spring Boot?说实话,如果是团队协作、以后要接学校统一身份认证的复杂系统,Spring Boot 也很合适,但对大多数学院项目来说,开发效率才是最关键的指标。Django 自带 Admin、Auth、ORM、Form、模板引擎,这些对“信息管理类系统”来说几乎是刚需,不用自己拼轮子。

拿“管理员后台”举例:如果用 Flask,前端列表页、编辑页、分页、搜索、权限控制全部要自己写;如果用 Django,一个admin.site.register(Project)就能得到一个可用的后台,剩下的只是按需定制美化。这就是“框架选型决定开发成本”的最直观体现。

Python 本身的语法也贴近自然语言,团队里有学生参与修改时,上手门槛明显低。Django 的 ORM 可以让你不用写原生 SQL,就能完成多表关联、聚合统计、条件筛选这些高频操作,减少了一大批手动拼接 SQL 的坑。

2.2 前后端分离还是服务端渲染

这个问题我纠结过。现在的网络热词里“django 前后端分离”搜索量很高,也确实有团队用 Django 做纯后端 API、前端用 Vue 做 SPA。但我的建议是,中小型管理系统优先选服务端渲染(Django 模板)

原因很简单:管理系统的主要使用场景是校内网、办公电脑,用户量不大,交互形态以表格、表单、详情页为主,服务端渲染完全可以覆盖。前后端分离带来的开发成本是双倍的:你需要维护两套项目、两套部署流程,还要处理跨域问题。对于课程设计、毕业设计或者学院内部工具而言,这个复杂度不划算。

如果你已经学了 Vue,也完全可以做成“Django + Vue”的组合,Django 只提供 REST API。但在我这个项目里,为了快速落地、方便后续交给学院老师维护,我用了 Django 模板 + Bootstrap 的方案,生产环境稳定,也足够灵活。

2.3 数据库选型与环境准备

开发阶段我建议直接用 Django 默认的 SQLite,零配置,跑起来就能改模型。等部署到正式环境,再换成 MySQL,配置好连接,python manage.py migrate一次迁移即可。不要一上来就折腾 MySQL,很多新手在这一步就被安装驱动的坑劝退了。

正式环境选用 MySQL 的理由是老生常谈:并发连接能力更强、便于后续数据分析团队同步、学校机房一般也提供现成的 MySQL 实例。Django 4.x 连接 MySQL 要用 mysqlclient 或 PyMySQL,mysqlclient 的 Windows 安装经常报错,但到了 Linux 服务器上用 pip 安装通常没问题。真装不上,用 PyMySQL 代替也是一样的效果。

整体技术栈我汇总在这里:

层次选型说明
后端框架Django 4.x / 5.x自带 Admin、Auth、ORM、Form
语言Python 3.9+语法简洁,生态完善
数据库SQLite(开发)/ MySQL(生产)通过 settings 切换
前端Bootstrap 5 + Django 模板快速构建后台管理界面
部署Linux + Gunicorn + Nginx 或宝塔面板稳定、社区资料多

开发前还要做好 Python 环境管理,强烈建议用虚拟环境,不要直接怼进系统 Python。Windows 下装 Python 后记得勾选“Add Python to PATH”,Linux 服务器上如果系统自带 Python 2 还要注意版本冲突。这些单独拿出来都可能让人卡住很久,环境搭顺了,后面才跑得顺。

3. 数据库设计与模型实现

3.1 核心模型一览

数据模型是整个系统的地基,建模建对了,后面所有业务逻辑都会很顺。我的核心模型有五个:用户(扩展 Django 自带 User)、项目表 Project、团队成员表 ProjectMember、评审记录表 ReviewRecord、过程材料表 ProjectFile。为了管理“中期检查”“结题报告”这类阶段材料,我又设计了一张 ProcessRecord 表来统一承载。

如果你第一次写 Django,建议先想清楚每张表的关系:

  • User 与 Project:一对一(申报人)和一对多(指导教师)。
  • Project 与 ProjectMember:一对多。
  • Project 与 ReviewRecord:一对多。
  • Project 与 ProcessRecord:一对多。

3.2 模型代码实现与逐段说明

先看用户模型。我不建议直接改 Django 的 User,最好用AbstractUser扩展,把角色字段加上去。

from django.contrib.auth.models import AbstractUser from django.db import models class User(AbstractUser): ROLE_CHOICES = ( ('student', '学生'), ('teacher', '指导教师'), ('college_admin', '学院管理员'), ('school_admin', '校级管理员'), ) role = models.CharField('角色', max_length=20, choices=ROLE_CHOICES, default='student') college = models.CharField('学院', max_length=100, blank=True) phone = models.CharField('联系电话', max_length=20, blank=True) class Meta: verbose_name = '用户' verbose_name_plural = verbose_name

这里加college字段,是为了让“学院管理员”只能看到本学院的项目。这个字段后面会在所有项目查询中反复用到,务必在设计初期就定好。同时要在 settings.py 里加一行:

AUTH_USER_MODEL = 'myapp.User'

这是 Django 的硬性要求,自定义用户模型必须在第一次 migrate 之前配置好,否则后续改起来极其痛苦。

接着是核心的 Project 模型,我挑最关键的字段写:

class Project(models.Model): STATUS_CHOICES = ( ('draft', '草稿'), ('pending_teacher', '待导师审核'), ('pending_college', '待学院初审'), ('pending_review', '待专家评审'), ('approved', '已立项'), ('midterm', '中期检查中'), ('pending_final', '待结题验收'), ('completed', '已结题'), ('rejected', '已驳回'), ) title = models.CharField('项目名称', max_length=200) project_type = models.CharField('项目类型', max_length=50, choices=TYPE_CHOICES, default='innovation') applicant = models.ForeignKey(User, verbose_name='申报人', on_delete=models.CASCADE, related_name='applied_projects') teacher = models.ForeignKey(User, verbose_name='指导教师', on_delete=models.SET_NULL, null=True, related_name='guided_projects') college = models.CharField('所属学院', max_length=100) status = models.CharField('当前状态', max_length=30, choices=STATUS_CHOICES, default='draft') budget = models.DecimalField('预算金额', max_digits=10, decimal_places=2, default=0) summary = models.TextField('项目简介') created_at = models.DateTimeField('创建时间', auto_now_add=True) updated_at = models.DateTimeField('更新时间', auto_now=True) class Meta: ordering = ['-updated_at']

一个比较大的设计决定是:状态字段用 CharField 保存字符串,还是用 IntegerField 存数字。我最终选了 CharField。原因是状态名在代码里可读性更好,project.status == 'pending_college'project.status == 3直观得多,而且后续在模板里直接显示也方便。

3.3 为什么要把“过程材料”单独建模

很多系统会在 Project 表上直接存midterm_filefinal_file这类字段,看起来简单,但有两个问题:一是以后想在“申报阶段”加一份“查重报告”,就得改表结构;二是想在页面里按时间线展示材料变更记录,非常麻烦。

所以我设计了 ProcessRecord 表:

class ProcessRecord(models.Model): RECORD_TYPES = ( ('apply', '申报书'), ('teacher_opinion', '导师意见'), ('college_opinion', '学院意见'), ('review_score', '专家评分'), ('midterm', '中期检查'), ('final', '结题报告'), ) project = models.ForeignKey(Project, verbose_name='所属项目', on_delete=models.CASCADE, related_name='records') record_type = models.CharField('记录类型', max_length=30, choices=RECORD_TYPES) content = models.TextField('内容', blank=True) uploaded_file = models.FileField('附件', upload_to='project_files/%Y/%m/', blank=True, null=True) operator = models.ForeignKey(User, verbose_name='操作人', on_delete=models.SET_NULL, null=True) created_at = models.DateTimeField('提交时间', auto_now_add=True) class Meta: ordering = ['created_at']

这样设计有一个明显的好处:所有阶段的历史记录,都按时间排列在一个列表里,页面展示时直接project.records.all()就能生成完整的时间线,评审专家看材料的时候也不用在不同菜单之间来回切换。

3.4 数据库表设计时的几个关键决定

第一个决定:项目与指导教师的关系为什么是 ForeignKey,而不是 ManyToMany?现实里一个项目确实可能有两个指导教师,但多数学校双创项目的第一导师只有一个。为了控制复杂度,我在第一版只设计了 ForeignKey;如果要支持多位导师,后面可以加中间表,而不是在一开始就上 M2M。

第二个决定:用户表要不要存学院名称的文本字段?严格来说,学院应该单独养一张 College 表,用户和项目通过外键关联。但我考虑到学院数量变化很少,而且用了外键以后,查询时还要多一次 JOIN,所以最终选择了直接在 User 和 Project 各存一个college字符串字段,牺牲规范性换开发效率,后续如果学校要跨学院统计,再升级也不迟。

第三个决定:所有时间字段统一用 Django 的 DateTimeField,不要自己在代码里datetime.now()拼字符串。Django 的auto_now_addauto_now能自动处理创建和更新时间,配合USE_TZ的设置,避免时区问题。

4. 核心业务功能实操实现

4.1 登录认证与角色路由

登录功能直接用 Django 自带的authenticatelogin,不需要自己加密、自己写 session。我写了一个统一的登录视图,认证成功以后按照角色跳转到不同的首页。

from django.contrib.auth import authenticate, login from django.shortcuts import render, redirect def user_login(request): if request.method == 'POST': username = request.POST['username'] password = request.POST['password'] user = authenticate(request, username=username, password=password) if user is not None: login(request, user) if user.role == 'student': return redirect('student_dashboard') elif user.role == 'teacher': return redirect('teacher_dashboard') elif user.role == 'college_admin': return redirect('college_dashboard') elif user.role == 'school_admin': return redirect('school_dashboard') else: return render(request, 'login.html', {'error': '用户名或密码错误'}) return render(request, 'login.html')

这里踩过一个坑:Django 3.2 以后,如果不使用默认的 User 模型,登录后user.role是可以直接访问的,但如果你在模板里写{% if user.role == 'student' %},必须在视图里把user变量传进模板上下文,否则默认只有request.user可用。另外一个新手容易忽略的是密码哈希问题:用User.objects.create(username=..., password='123456')是没有哈希的,必须用create_user。我见过很多人在测试阶段用create,然后发现怎么都登不进去。

4.2 项目申报模块的实现细节

学生登录后,最核心的操作是提交申报书。我用 Django 的 ModelForm 快速构建表单,同时处理文件上传。这里的第一步,是让学生先维护个人信息,把学院、手机号填完整,因为项目表里要冗余保存学院字段,以便管理员按学院筛选。

from django import forms from .models import Project, ProcessRecord class ProjectApplyForm(forms.ModelForm): class Meta: model = Project fields = ['title', 'project_type', 'budget', 'summary'] def clean_budget(self): budget = self.cleaned_data.get('budget') if budget <= 0: raise forms.ValidationError('预算金额必须大于0') return budget

视图里,学生提交有效表单后,自动创建 Project 和一条 ProcessRecord,状态直接变成“待导师审核”。

def student_apply(request): if request.method == 'POST': form = ProjectApplyForm(request.POST) if form.is_valid(): project = form.save(commit=False) project.applicant = request.user project.college = request.user.college project.status = 'pending_teacher' project.save() ProcessRecord.objects.create( project=project, record_type='apply', content=project.summary, operator=request.user, ) return redirect('student_project_list') else: form = ProjectApplyForm() return render(request, 'student_apply.html', {'form': form})

这里有两个细节值得注意。第一,commit=False是为了在保存前把applicantcollege这两个用户不可编辑的字段补上,直接用表单数据保存会出现“subject to required”的问题。第二,ProcessRecord 不直接用form.is_valid()的文件字段,而是单独处理文件上传,这样文件存储位置和数据库记录可以分开控制,便于部署时调整路径。

4.3 导师审核与状态机流转

导师端页面列出处于“待导师审核”状态的项目,导师可以查看申报书详情,然后点击“通过”或“驳回”。为了限制操作权限,我在视图里加了判断:只有项目关联的指导教师本人才能操作。

from django.core.exceptions import PermissionDenied def teacher_review(request, project_id): project = get_object_or_404(Project, id=project_id) if project.teacher != request.user: raise PermissionDenied('您不是该项目的指导教师') if request.method == 'POST': opinion = request.POST.get('opinion', '') action = request.POST.get('action') ProcessRecord.objects.create( project=project, record_type='teacher_opinion', content=opinion, operator=request.user, ) if action == 'approve': project.status = 'pending_college' elif action == 'reject': project.status = 'rejected' project.save() return redirect('teacher_project_list') return render(request, 'teacher_review.html', {'project': project})

这个流程背后的关键逻辑,是“只有两种操作会导致状态变化:同意则进入下一环节,驳回则回到草稿或者直接终止”。我没有设计复杂的回退机制,因为实际的业务里,学生被驳回后大多数是重新修改再提交,所以只要在界面上给学生提供一个“重新提交”按钮,把 status 从rejected改回pending_teacher就行。状态机的核心不是功能多,而是清晰稳定。

4.4 专家评审与评分统计

学院初审通过之后,项目进入专家评审环节。这里我没给专家专门做独立前端,而是给每个评审专家开一个受限的 Django Admin 账号,然后定制一个评审后台页面。原因前面说过:评审专家通常只是临时使用,不需要完整掌握系统操作流程,给他们一个尽量简单的页面即可。

评审专家给项目打分、填意见,结果存到 ReviewRecord:

class ReviewRecord(models.Model): project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='reviews') expert = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='评审专家') score = models.IntegerField('评分(0-100)', default=0) comment = models.TextField('评审意见', blank=True) created_at = models.DateTimeField('评审时间', auto_now_add=True) class Meta: unique_together = ('project', 'expert')

unique_together保证了每个专家对同一项目只有一个评审结果。如果专家重复提交,ORM 层面就会拦截,不用自己写判断。统计最终得分时,多个专家的分数取平均,规则不复杂,但在设置分数范围这一步,要在表单的 clean 方法里校验,防止有人手工提交 200 分。

4.5 中期检查与结题验收

立项后,系统自动进入项目过程管理阶段。学生需要按时间节点提交中期检查报告,指导教师在后台确认,学院管理员统一查看进度。我把中期检查和结题报告都统一用 ProcessRecord 表承载,只是record_type不同,这样前端页面可以用同一套时间线组件展示,省了很多重复代码。

对于到期未提交的项目,我有一个简单的提醒机制:写一个 Django management command,定期扫描数据库中超过截止日期仍未提交材料的项目,生成待办列表,并发消息给学院管理员。这个提醒功能不需要很复杂,但能体现管理系统“管理”二字的价值。

5. 部署上线与常见问题排查实录

5.1 本地开发环境的搭建过程

不管是在 Windows 还是 Linux 上,我都先用虚拟环境隔离依赖。步骤很简单:

python -m venv venv source venv/bin/activate # Windows 下执行 venv\Scripts\activate pip install django mysqlclient django-admin startproject myproject cd myproject python manage.py startapp main

跑通默认的 Django 页面后,再把前面设计的模型代码放进去,执行以下命令生成并应用数据库表:

python manage.py makemigrations main python manage.py migrate python manage.py createsuperuser

开发环境里最需要尽早做的一件事,就是先创建超级用户并登录 Admin 后台,验证自定义 User 模型能否正常使用。这是很多 Django 新手忽略的验证步骤,等写了几十个功能才发现用户系统出问题,返工成本非常大。

5.2 生产环境部署:用 Gunicorn + Nginx 还是宝塔

我自己的推荐是:如果有 Linux 服务器使用经验,用 Gunicorn + Nginx 最干净;如果更习惯可视化操作,用宝塔面板里的 Python 项目管理器部署 Django 也挺稳。整体步骤都是类似的:

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

然后在 Nginx 配置里做反向代理,把 80 端口转发到 8000,同时处理好静态文件的路径。Django 的静态文件在 DEBUG=False 时不会自动提供,需要先执行python manage.py collectstatic,把散落在各个 app 里的静态资源收集到统一目录,再让 Nginx 直接服务这些文件。这一步漏掉的话,页面样式就全丢了,这是最高频的“上线后样式丢失”问题。

5.3 我在实际部署中踩过的五个高频坑

第一个坑:MySQL 时区问题导致时间字段相差 8 小时。解决办法是在 settings.py 里设置TIME_ZONE = 'Asia/Shanghai'USE_TZ = True,并且连接 MySQL 时在 OPTIONS 里加上'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"。不处理的话,用户看到的时间永远和本地差 8 小时,会引发不少不必要的工单。

第二个坑:文件上传目录权限不对。项目里有申报书上传、中期报告上传,生产环境的 media 目录如果不对 Nginx 开放权限,就会出现“上传成功但页面打不开文件”的诡异现象。建议把 media 目录独立出来,并在 Nginx 里单独配置/media/路径。

第三个坑:使用STATIC_ROOTSTATICFILES_DIRS混淆。前者是执行 collectstatic 后存放所有静态文件的目标目录,后者是告诉 Django 在开发模式下去哪里找 app 之外的静态文件。如果设置反了,运行 collectstatic 会直接报错,或者收集出大量重复文件。

第四个坑:在 view 里直接用filter(user=request.user)但没判断用户是否登录。未登录用户访问时request.user是 AnonymousUser,ORM 查询会报错。我习惯在视图函数上加@login_required装饰器,或者在最开始写if not request.user.is_authenticated: return redirect('login')

第五个坑:Django Admin 样式丢失。常见于 DEBUG=False 之后没有正确配置 Static,或者 CDN 外链因为网络原因加载失败。稳妥做法是把 Admin 静态文件 collect 到本地,而不是依赖外链,这样内网环境也稳定。

5.4 操作心得与流程优化建议

整个系统上线后,我最大的体会是:流程引擎比界面精美重要得多。最初我花了很多时间调首页的 CSS、加各种动画,结果实际使用反馈最好的功能却是“状态时间线”——项目走到哪一步、谁在什么时候干了什么,一目了然。这个功能的实现成本很低(就是按created_at排列 ProcessRecord),收益却很高。

另外,如果你要给学院管理员做数据统计页面,建议直接用 Django ORM 的annotateaggregate,不要来回遍历 Python 列表。举个简单例子,统计每个状态的项目数量:

from django.db.models import Count result = Project.objects.values('status').annotate(total=Count('id'))

这一句话就能得到[{'status': 'approved', 'total': 12}, ...],再配合 state 名称映射,直接渲染成表格或柱状图都行。

6. 常见问题速查表

问题现象可能原因解决方案
登录提示用户名或密码错误用户是用objects.create创建的,密码未被哈希改用create_user,或调用user.set_password()
页面样式全部丢失DEBUG=False后未配置静态文件执行python manage.py collectstatic,Nginx 指向 STATIC_ROOT
上传文件后无法访问media 目录权限或 Nginx 配置缺失检查 media 目录权限,确认 Nginx 中有/media/的 location 配置
时间显示与本地差 8 小时时区配置不当settings.py 设置TIME_ZONE='Asia/Shanghai',并重启服务
专家重复评审同一项目ReviewRecord 缺少唯一约束在模型 Meta 加unique_together = ('project', 'expert')后重新迁移
mysqlclient 安装报错缺少编译依赖或版本不匹配Linux 上先安装python3-dev default-libmysqlclient-dev build-essential,或改用 PyMySQL
部署在非根路径时 Admin 链接 404没配置FORCE_SCRIPT_NAME在 settings.py 中设置FORCE_SCRIPT_NAME = '/subpath',并同步调整 Nginx

根据我实际帮别人排查的经验,这张表里出现频率最高的还是密码登录问题与静态文件问题,两个都非常基础,但都很磨人。写代码的时候留意一下,能少加两小时的班。

我个人在实际操作中的体会是:这类管理系统真正难的不是写代码,而是定义清楚“谁能干什么、什么状态能变到下一个什么状态”。如果你刚开始做,建议先抛开代码,拿张纸把项目从申报到结题的每一步画出来,再对照着去建模型、写视图,会发现后面顺利很多。最后再分享一个小技巧:在项目里保留一个用于生成测试数据的 management command,每次切换环境或者给别人演示时,一键生成几十条不同状态的模拟数据,演示效果和调试效率都会好很多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 8:28:37

WorkBuddy本地部署:离线大模型工作台实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/15 8:20:58

小白程序员必备:大模型学习指南,开启AI智能体新篇章

随着智能体在企业的广泛应用&#xff0c;如何高效生产、统一管理和持续运营智能体成为关键问题。文章指出&#xff0c;企业AI的竞争焦点已从单点应用建设转向规模化智能体基础设施建设。国内外企业纷纷加码智能体工厂业务&#xff0c;旨在解决智能体规模化部署的难题。文章强调…

作者头像 李华
网站建设 2026/9/15 8:19:37

基于Matlab与Shapley值法的电力系统调峰成本量化与分摊建模

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/15 8:19:09

菜鸟教程学习笔记——CSS(一)

如何插入样式表 插入样式表的方法有三种: 外部样式表(External style sheet)内部样式表(Internal style sheet)内联样式(Inline style) 优先级&#xff1a;内联 > 内部 > 外部 外部样式表 <head> <link rel"stylesheet" type"text/css"…

作者头像 李华
网站建设 2026/9/15 8:18:46

containerd 1.7.16 + nerdctl 1.7.6 + Jenkins

环境说明 宿主机系统&#xff1a;CentOS7&#xff0c;已部署 K8s&#xff0c;containerd 版本&#xff1a;1.7.16nerdctl 选用 v1.7.6&#xff08;兼容 containerd 1.7.16&#xff0c;不要用 1.8&#xff09;目标流水线&#xff1a;Git 拉代码 → Maven 打包 → nerdctl 构建镜…

作者头像 李华
网站建设 2026/9/15 8:18:24

Java对象与封装深度解析:从JVM内存到工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华