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

创建专属的实验室应用

创建一个专门的 lab应用#进入你的 Django 项目根目录python manage.py startapp lab配置 settings.py打开项目根目录下的 settings.py在INSTALLED_APPS里添加lab应用INSTALLED_APPS [ polls.apps.PollsConfig, django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.staticfiles, lab, # 新增这一行 ]替换 lab/models.py 代码from django.db import models from django.utils import timezone from datetime import datetime # 实验室模型 class Laboratory(models.Model): # 安全等级选项 SAFETY_LEVELS [ (1, 一级), (2, 二级), (3, 三级), ] name models.CharField(max_length100, verbose_name实验室名称) lab_id models.CharField(max_length20, uniqueTrue, verbose_name实验室编号) room_number models.CharField(max_length20, verbose_name房间号) created_date models.DateField(auto_now_addTrue, verbose_name创建年月) updated_date models.DateField(auto_nowTrue, verbose_name最近更新年月) manager models.ForeignKey(LabTechnician, on_deletemodels.SET_NULL, nullTrue, related_namemanaged_labs, verbose_name管理员) area models.FloatField(verbose_name面积) seats models.IntegerField(verbose_name座位数) safety_level models.CharField(max_length1, choicesSAFETY_LEVELS, verbose_name安全等级) computers models.IntegerField(verbose_name电脑数) other_equipment models.TextField(blankTrue, verbose_name其他主要设备) notes models.TextField(blankTrue, verbose_name备注) def __str__(self): return f{self.name} ({self.room_number}) # 学期模型 class Semester(models.Model): name models.CharField(max_length20, verbose_name学期名称) start_date models.DateField(verbose_name起始日期) is_active models.BooleanField(defaultTrue, verbose_name是否激活) def __str__(self): return self.name # 教师模型 class Teacher(models.Model): # 专业选项 MAJORS [ (CS, 计算机), (SE, 软件工程), (BD, 大数据), (EC, 电商), ] name models.CharField(max_length100, verbose_name姓名) phone models.CharField(max_length20, verbose_name联系电话) major models.CharField(max_length2, choicesMAJORS, verbose_name所属专业) is_external models.BooleanField(defaultFalse, verbose_name是否校外) def __str__(self): return self.name # 实验员模型 class LabTechnician(models.Model): name models.CharField(max_length100, verbose_name姓名) phone models.CharField(max_length20, verbose_name联系电话) def __str__(self): return self.name # 实验员值班安排模型 class LabDuty(models.Model): # 星期选项 DAYS [(i, day) for i, day in enumerate([周一, 周二, 周三, 周四, 周五], 1)] # 班次选项 SHIFTS [(morning, 早8点前), (evening, 晚5点后)] technician models.ForeignKey(LabTechnician, on_deletemodels.CASCADE, related_nameduties, verbose_name实验员) day models.IntegerField(choicesDAYS, verbose_name星期) shift models.CharField(max_length10, choicesSHIFTS, verbose_name班次) class Meta: unique_together (technician, day, shift) # 避免同一实验员同一天同一班次重复安排 def __str__(self): return f{self.technician.name} - {self.get_day_display()} {self.get_shift_display()} # 课程模型 class Course(models.Model): MAJORS [ (CS, 计算机), (SE, 软件工程), (BD, 大数据), (EC, 电商), (IC, 集成电路微专业), (OS, 开源微专业), ] name models.CharField(max_length100, verbose_name课程名称) majors models.JSONField(defaultlist, verbose_name所属专业) # 支持多个专业 def __str__(self): return self.name # 软件模型 class Software(models.Model): LICENSE_TYPES [ (free, 免费), (paid, 收费), (cracked, 收费破解), ] name models.CharField(max_length100, verbose_name软件名称) version models.CharField(max_length20, verbose_name软件版本) license models.CharField(max_length10, choicesLICENSE_TYPES, verbose_name收费状态) def __str__(self): return f{self.name} {self.version} # 实验室使用登记模型 class LabUsageRecord(models.Model): date models.DateField(defaulttimezone.now, verbose_name使用日期) semester models.ForeignKey(Semester, on_deletemodels.CASCADE, verbose_name学期) course models.ForeignKey(Course, on_deletemodels.CASCADE, verbose_name课程) labs models.ManyToManyField(Laboratory, verbose_name使用实验室) software models.ManyToManyField(Software, verbose_name使用软件) user_type models.CharField(max_length10, choices[(teacher, 教师), (technician, 实验员)], verbose_name使用者类型) teacher models.ForeignKey(Teacher, on_deletemodels.SET_NULL, nullTrue, blankTrue, verbose_name教师) technician models.ForeignKey(LabTechnician, on_deletemodels.SET_NULL, nullTrue, blankTrue, verbose_name实验员) major models.CharField(max_length2, choicesTeacher.MAJORS, verbose_name所属专业) # 自动填充学期和专业的逻辑 def save(self, *args, **kwargs): # 自动关联当前日期对应的学期 if not self.semester_id: today self.date or timezone.now().date() semester Semester.objects.filter(start_date__ltetoday).order_by(-start_date).first() if semester: self.semester semester # 自动填充专业 if self.teacher and not self.major: self.major self.teacher.major super().save(*args, **kwargs) def __str__(self): return f{self.course.name} - {self.date} # 实验室运维日志模型 class LabMaintenance(models.Model): lab models.ForeignKey(Laboratory, on_deletemodels.CASCADE, verbose_name实验室) issue models.TextField(verbose_name故障/维护情况) discovered_date models.DateField(defaulttimezone.now, verbose_name发现/处理日期) solved models.BooleanField(defaultFalse, verbose_name是否解决) def __str__(self): return f{self.lab.name} - {self.discovered_date}注册模型到 Admin 后台打开lab/admin.py输入代码from django.contrib import admin from .models import ( Laboratory, Semester, Teacher, LabTechnician, LabDuty, Course, Software, LabUsageRecord, LabMaintenance ) # 注册所有模型到后台 admin.site.register(Laboratory) admin.site.register(Semester) admin.site.register(Teacher) admin.site.register(LabTechnician) admin.site.register(LabDuty) admin.site.register(Course) admin.site.register(Software) admin.site.register(LabUsageRecord) admin.site.register(LabMaintenance)执行数据库迁移在终端运行以下命令创建实验室相关的数据库表python manage.py makemigrations lab python manage.py migrate重启服务器并验证python manage.py runserver分配人员权限访问http://127.0.0.1:8000/admin你会看到左侧菜单里出现了所有实验室相关的模型Laboratory、Semester 等同时回到用户组权限分配页面输入lab就能看到对应的中文权限项了。进入了 Lab_Technician 用户组的权限配置页面接下来可以这样操作权限分配建议按角色Lab_Technician实验员推荐权限Can add lab duty、Can change lab duty、Can view laboratory、Can view lab usage record、Can add lab maintenance、Can change lab maintenance。不建议给Can delete类权限避免误删重要数据。Teacher教师推荐权限Can view course、Can view laboratory、Can add lab usage record、Can change own lab usage record。Lab_Admin管理员可以直接勾选所有lab应用的权限进行全面管理登录teacher_zhang的账号密码这个界面说明你的权限分配完全成功了从TEACHER_ZHANG的后台首页可以看到他只能看到LAB应用下的三个模块Courses查看、Lab usage records可添加、Laboratories查看。其他模块如Lab dutys、Lab maintenances等都被隐藏了这正好符合教师角色的权限需求可以查看课程和实验室信息可以提交实验室使用记录不能管理值班、维护等其他功能这说明你之前的权限分配完全符合预期系统已经可以正常使用了。实验室管理系统的人员权限分配配置好了admin_li属于Lab Admin组拥有对lab应用的全部管理权限。tech_li属于Lab Technician组负责值班和维护管理。teacher_zhang属于Teacher组负责提交使用记录和查看信息。niuke超级管理员账号拥有系统最高权限。现在录入所有人员的用户权限录入基础数据用admin_li或超级用户登录按以下顺序录入避免关联字段为空Semesters学期如 “2026 年春季学期”。Teachers教师录入姓名、专业、联系方式关联teacher_zhang等用户。Lab technicians实验员录入姓名、工号关联tech_li等用户。Laboratories实验室录入房间号、座位数、安全等级、负责人关联实验员。Softwares软件录入实验室安装的软件名称、版本。Courses课程关联教师、对应实验室、所属学期。验证所有角色的完整操作流程并运行教师teacher_zhang提交实验室使用申请→保存成功。实验员tech_li查看/审核使用申请→添加值班安排/维护记录→保存成功。管理员admin_li修改/删除数据→权限无异常。只要各角色能完成对应操作且无报错就说明系统核心功能正常。

相关文章:

创建专属的实验室应用

创建一个专门的 lab 应用# 进入你的 Django 项目根目录python manage.py startapp lab配置 settings.py打开项目根目录下的 settings.py,在 INSTALLED_APPS 里添加 lab 应用INSTALLED_APPS ["polls.apps.PollsConfig",django.contrib.admin,django.contr…...

机器学习个人笔记(第一节)

第一章:什么是机器学习定义:计算机程序从经验E中学习,解决某一任务T,进行某一性能P,通过P测定在T上的表现因经验E而提高 eg:跳棋程序 E: 程序自身下的上万盘棋局 T: 下跳棋 P&#x…...

从Mobile U-ViT看医疗AI轻量化:大核卷积+Transformer如何解决超声/CT分割难题?

Mobile U-ViT:医疗影像分割的轻量化革命与技术实践 在超声探头划过患者腹部的瞬间,算法需要从模糊的灰度图像中勾勒出肿瘤轮廓;当CT扫描仪完成数千张断层影像采集后,系统必须在数秒内完成三维重建。这些过去需要专家数小时完成的工…...

收藏!P7面试不慌|2026大模型Agent入门,程序员转岗/加分必看

很多程序员担心P7面试被面试官追问到哑口无言,核心原因只有一个——手里没有拿得出手的硬货。但只要你吃透GraphRAP策略,亲手写过Agent规划模式,能清晰拆解大模型幻觉的解决方案,还能聊透自动化评测的核心逻辑,你就不再…...

Vue2项目在IE11和安卓4.4上跑不起来?手把手教你配置babel和polyfill

Vue2企业级项目兼容IE11与安卓4.4全实战指南 1. 低版本浏览器兼容的核心挑战 当Vue2项目需要运行在IE11或安卓4.4等低版本环境时,开发者常会遇到以下典型问题: Promise未定义:控制台出现"Uncaught ReferenceError: Promise is not defin…...

基于Node.js搭建CHORD-X报告生成与管理后台

基于Node.js搭建CHORD-X报告生成与管理后台 最近在做一个数据分析项目,需要定期生成结构化的报告。手动整理数据、写文档、再导出PDF,一套流程下来,半天时间就没了。后来我们团队接触到了CHORD-X,一个专门用于生成分析报告的智能…...

MobaXterm远程连接服务器与Anaconda环境配置全攻略

1. MobaXterm远程连接服务器实战指南 第一次用MobaXterm连服务器时,我对着满屏的命令行窗口手足无措。后来才发现,这个工具简直是远程开发的神器——它把SSH连接、文件传输、代码编辑这些功能都打包在一个界面里,特别适合我们这种需要频繁操作…...

一条SQL拖垮系统!教你用Explain光速排查性能瓶颈

一条SQL拖垮系统!资深DBA教你用Explain光速排查性能瓶颈 在凌晨三点的生产环境中,报警群里突然弹出的“数据库CPU使用率达到99%”的消息足以让任何一位后端开发或DBA心惊肉跳。很多时候,罪魁祸首并非流量洪峰,而是一条不起眼的慢查…...

Qwen-VL视觉语言模型实战:Qwen-Image镜像在教育行业图像题解答中的应用案例

Qwen-VL视觉语言模型实战:Qwen-Image镜像在教育行业图像题解答中的应用案例 1. 教育场景中的图像理解挑战 在教育领域,教师和学生经常需要处理大量包含图像的学习材料。从数学几何题到物理实验图,再到生物细胞结构图,图像理解一…...

Qwen-Image镜像镜像免配置:内置/data挂载与/nvme高速存储适配方案

Qwen-Image镜像免配置:内置/data挂载与/nvme高速存储适配方案 1. 镜像概述与核心优势 Qwen-Image定制镜像是一款专为RTX 4090D GPU环境优化的大模型推理解决方案。基于官方Qwen-Image基础镜像深度定制,预装了完整的CUDA 12.4开发环境和通义千问视觉语言…...

【幻觉缓解算法 - 减少大模型错误生成】第一章 幻觉的本质、形式化定义与评估体系

目录 第一章 幻觉的本质、形式化定义与评估体系 1.1 幻觉问题的形式化定义与分类学 1.1.1 概念边界与形式化表示 1.1.2 产生根源的多层级分析 1.2 幻觉检测的评估框架与基准测试 1.2.1 自动化评估指标的分类体系 1.2.2 领域特定基准测试集 第一章 幻觉的本质、形式化定义…...

【幻觉缓解算法 - 减少大模型错误生成】第三章 监督微调与对齐训练的事实性优化

目录 3.1 监督微调与对齐训练的事实性优化 3.1.1 领域特定微调策略 3.1.1.1 真实性指令微调 3.1.1.2 拒绝感知训练 3.1.1.3 合成数据增强 3.1.2 基于人类反馈的强化学习(RLHF)变体 3.1.2.1 事实性奖励模型 3.1.2.2 直接偏好优化(DPO)的事实性适配 3.1.2.3 多阶段弱…...

异构算力平台推荐:2026年谁在重新定义AI算力?

当下,大模型训练与推理进入规模化运行期,算力已成为基础设施的常量。公开报告显示,2024 年中国智能算力规模达 725.3 EFLOPS,同比增长 74.1%。然而,面对多元化的业务场景与复杂的硬件生态,如何高效地分配与…...

Qwen3-0.6B-FP8开源大模型:FP8量化后模型精度损失实测与补偿策略

Qwen3-0.6B-FP8开源大模型:FP8量化后模型精度损失实测与补偿策略 1. 引言:当大模型遇上“瘦身术” 最近,一个叫Qwen3-0.6B-FP8的模型在开发者圈子里火了起来。它只有6亿参数,显存占用不到1.5GB,却能流畅地进行对话、…...

长沙GEO优化公司怎么选?2026年服务商对比与判断指南

在生成式人工智能逐渐成为主流信息入口的背景下,企业内容是否能被AI系统识别与引用,直接影响曝光与获客效率。因此,越来越多企业开始关注GEO优化公司(生成式引擎优化服务商),希望通过专业服务提升在AI问答系…...

Qwen3-32B-Chat百度技术生态适配:如何将私有服务接入百度智能云AI工作流

Qwen3-32B-Chat百度技术生态适配:如何将私有服务接入百度智能云AI工作流 1. 镜像概述与核心优势 Qwen3-32B-Chat 私有部署镜像专为 RTX 4090D 24GB 显存环境深度优化,基于 CUDA 12.4 和驱动 550.90.07 构建,提供开箱即用的大模型推理能力。…...

【上位机心法】别让传感器数据卡死你的 UI!撕碎 Qt/QML 渲染黑盒,用 C++ 后端打造 144Hz 零延迟工业仪表盘

摘要:当底层的 STM32 以每秒上千次的频率向电脑疯狂倾泻弹性波或高频震源数据时,如果你的 Qt 上位机界面开始卡顿、甚至假死,不要怪电脑配置低,请反思你的渲染架构。本文将无情揭露 信号与槽 (Signals and Slots) 在极高频场景下的…...

避坑指南:SAP生产订单历史状态配置OPL8的3个关键点与报工数据丢失解决方案

SAP生产订单状态管理深度解析:从OPL8配置到数据追溯实战 1. 生产订单状态管理的核心价值与常见痛点 在制造业ERP实施中,生产订单状态管理就像流水线上的指示灯系统,实时反映每个订单的生命周期位置。但许多实施团队往往将注意力集中在物料需求…...

Qwen3-32B-Chat人力资源助手:招聘JD生成、面试问题库、员工手册编写

Qwen3-32B-Chat人力资源助手:招聘JD生成、面试问题库、员工手册编写 1. 人力资源AI助手概述 在人力资源管理的日常工作中,招聘JD撰写、面试问题准备和员工手册编写是三项耗时且需要专业经验的工作。Qwen3-32B-Chat作为一款专为人力资源场景优化的大语言…...

最新 AI 论文盘点(2026-03-21):8 篇新作看可靠推理、GUI Agent 奖励、VLA 可解释性与机器人真实效率

最新 AI 论文盘点(2026-03-21):8 篇新作看可靠推理、GUI Agent 奖励、VLA 可解释性与机器人真实效率 今天这批论文放在一起看,信号其实很集中。 如果说前一阵很多工作还在比谁更强、谁更大、谁的 benchmark 更高,那么今…...

Libtool-bin:翻译官的工具箱使用手册

引子:翻译官报到,但他的工具箱在哪? 你听说了Libtool的大名——那个精通三十种操作系统方言的翻译官。你迫不及待地想请他来帮忙编译你的库。 你打开终端,信心满满地敲下: $ libtool --modecompile gcc -c foo.c bash:…...

AI+医疗工程化:模型上线到医院内网前,要补哪些系统能力?

AI医疗工程化:模型上线到医院内网前,要补哪些系统能力? 很多 AI医疗项目做到后期,团队都会进入一个看起来很兴奋、实际也很危险的阶段。 模型指标已经不错了。 AUC、F1、Dice、BLEU,或者某个多模态 benchmark 分数都…...

AFSim仿真系统脚本语言:从语法规则到实战建模

1. AFSim脚本语言入门:从字符到表达式 第一次接触AFSim脚本语言时,我被它简洁的语法设计所吸引。与Python这类通用语言不同,AFSim的语法是专门为仿真建模场景优化的。举个例子,在定义实体运动轨迹时,用AFSim写出的代码…...

怎么设计企业内部智能体的交互方式,让员工愿意用、用得懂?

怎么设计企业内部智能体的交互方式,让员工愿意用、用得懂? 在企业数字化转型的浪潮中,很多公司投入重金部署了“企业智脑”或AI智能体(AI Agent),但最后却发现:系统很强大,员工却不…...

利用威尔逊电流镜优化高精度电流源的稳定性与放大倍数设计

1. 电流源设计中的核心挑战 在精密电子系统中,稳定可靠的电流源就像血液循环系统对于人体的重要性一样。传统三极管电流源在实际使用中会遇到两个致命问题:温度变化导致输出电流漂移,以及放大倍数不足时无法满足应用需求。我曾在工业传感器项…...

企业内部智能体,能不能实现代码的自动编写、测试和运维?

企业内部智能体,能不能实现代码的自动编写、测试和运维?在企业数字化转型的进程中,研发效能(DevOps)的提升一直是技术管理者关注的核心。随着大模型技术的演进,AI不再仅仅是一个辅助写代码的“插件”&#…...

Swift面试题2024:从基础到高阶的全面解析

1. Swift基础语法面试题解析 作为iOS开发的核心语言,Swift的基础语法是面试必考内容。先来看一个经典问题:字符串创建的两种方式有什么区别? // 方式一 let str1 String("Hello")// 方式二 let str2 "\("Hello")…...

S12SD紫外线传感器在MSPM0G3507上的低功耗模拟接口移植

1. S12SD紫外线传感器模块技术解析与MSPM0G3507平台移植实践1.1 模块核心特性与工程定位S12SD是一款面向嵌入式环境设计的专用紫外线(UV)强度检测模块,其核心传感元件采用氮化镓(GaN)基肖特基光电二极管。该器件在240n…...

Cogito-v1-preview-llama-3B惊艳效果:30语种实时翻译+语法纠错演示

Cogito-v1-preview-llama-3B惊艳效果:30语种实时翻译语法纠错演示 1. 模型介绍:小而强的多语言专家 Cogito v1预览版是Deep Cogito推出的混合推理模型系列中的明星产品。这个仅有3B参数的模型,在大多数标准基准测试中都超越了同等规模的开源…...

Leather Dress Collection显存优化技巧:梯度检查点+FP16混合精度部署指南

Leather Dress Collection显存优化技巧:梯度检查点FP16混合精度部署指南 1. 为什么你的AI绘画总是爆显存? 如果你玩过Stable Diffusion,特别是加载了多个LoRA模型后,大概率遇到过这个烦人的问题:显存不足&#xff08…...