day2作业笔记
模型models/articles.pyfrom tortoise import Model,fields class Category(Model): idfields.IntField(pkTrue,auto_incrementTrue,description分类ID) namefields.CharField(max_length50,description分类名称) class Meta: tabledb_category class Author(Model): idfields.IntField(pkTrue,auto_incrementTrue,description作者ID) namefields.CharField(max_length50,description作者名称) class Meta: tabledb_author class Article(Model): idfields.IntField(pkTrue,auto_incrementTrue,description文章ID) titlefields.CharField(max_length200,description文章标题) contentfields.TextField(description文章内容) summaryfields.CharField(max_length200,description文章摘要) categoryfields.ForeignKeyField(models.Category,description分类) authorfields.ForeignKeyField(models.Author,description作者) tagsfields.ManyToManyField(models.Tag,related_namearticles,description标签) view_countfields.IntField(default0,description文章浏览量) statusfields.SmallIntField(choices[(0,草稿),(1,已发布)],default0,description文章状态) class Meta: tabledb_articlemodels/tags.pyfrom tortoise import Model,fields class Tag(Model): idfields.IntField(pkTrue,auto_incrementTrue,description标签ID) namefields.CharField(max_length50,description标签名称) colorfields.CharField(max_length20,default#409EFF,description标签颜色) class Meta: tabledb_tag接口1.分类增删改查功能from fastapi import APIRouter, HTTPException from pydantic import BaseModel from apps.models import Category category_routerAPIRouter() category_router.get(/category/,tags获取所有分类) async def get_all_category(): categoriesawait Category.all() return categories class CategoryCreateRequest(BaseModel): name:str category_router.post(/category/,tags新建分类) async def add_category(request:CategoryCreateRequest): categoryawait Category.create(**request.model_dump()) return category class CategoryUpdateRequest(BaseModel): name:str category_router.put(category/{id},tags编辑分类) async def update_category(id:int,request:CategoryUpdateRequest): categoryawait Category.get_or_none(idid) if not category: raise HTTPException(status_code404,detail分类不存在) await category.update_from_dict(request.model_dump()).save() return category category_router.delete(category/{id},tags删除分类) async def delete_category(id:int): categoryawait Category.get_or_none(idid) await category.delete() return {message:删除成功,id:id}2.文章增删改查功能from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel, computed_field from tortoise.contrib.pydantic import pydantic_model_creator from apps.models import Article, Tag from utils.jwt import login_required article_routerAPIRouter() ArticleOutpydantic_model_creator(Article,nameArticleOut) class TagOut(BaseModel): id:int name:str color:str class CategoryOut(BaseModel): id:int name:str class AuthorOut(BaseModel): id:int name:str class ArticleListOut(BaseModel): id:int title:str summary:str view_count:int status:int category:CategoryOut author:AuthorOut tags:list[TagOut] computed_field property def status_text(self)-str: return 草稿 if self.status0 else 已发布 article_router.get(/article/,tags文章列表(条件筛选)) async def article_list(userDepends(login_required),category:intNone,title:strNone,): queryArticle.all() if category is not None: queryquery.filter(category_idcategory) if title is not None: queryquery.filter(title__containstitle) articles await query.prefetch_related(category, author, tags) return [ ArticleListOut( ida.id, titlea.title, summarya.summary, view_counta.view_count, statusa.status, categoryCategoryOut(ida.category.id, namea.category.name), authorAuthorOut(ida.author.id, namea.author.name), tags[TagOut(idt.id, namet.name, colort.color) for t in a.tags] ) for a in articles ] class ArticleCreateRequest(BaseModel): title:str content:str summary:str category:int tags:list[int] status:int0 article_router.post(/article/,tags新建文章) async def create_article(request:ArticleCreateRequest,userDepends(login_required)): tag_idsrequest.tags datarequest.model_dump(exclude{tags}) articleawait Article.create(**data,author_iduser.id) if tag_ids: tagsawait Tag.filter(id__intag_ids) await article.tags.add(*tags) return await ArticleOut.from_tortoise_orm(article) class ArticleUpdateRequest(BaseModel): title:str content:str summary:str category:int tags:list[int] status:int0 article_router.put(/article/{id},tags编辑文章) async def update_article(id:int,request:ArticleUpdateRequest,userDepends(login_required)): article_idawait Article.get_or_none(idid) if not article_id: raise HTTPException(status_code404,detail文章不存在) tag_ids request.tags data request.model_dump(exclude{tags}, exclude_noneTrue) await article_id.update_from_dict(data).save() if tag_ids is not None: tags await Tag.filter(id__intag_ids) await article_id.tags.clear() await article_id.tags.add(*tags) return await ArticleOut.from_tortoise_orm(article_id) article_router.delete(/article/{id},tags删除文章) async def delete_article(id:int,userDepends(login_required)): article_idawait Article.get_or_none(idid) if not article_id: raise HTTPException(status_code404,detail文章不存在) await article_id.delete() return {message:删除成功}3.标签增删查功能from fastapi import APIRouter, HTTPException from pydantic import BaseModel, Field from apps.models import Tag tag_routerAPIRouter() tag_router.get(/tag/,tags获取所有标签) async def tag_list(): tagsawait Tag.all() return tags class TagCreateRequest(BaseModel): name:str color:str tag_router.post(/tag/,tags创建标签) async def add_tag(request:TagCreateRequest): existsawait Tag.filter(namerequest.name).first() if exists: raise HTTPException(status_code400,detail标签名称已存在) tagawait Tag.create(**request.model_dump()) return tag tag_router.delete(/tag/{id},tags删除标签) async def delete_tag(id:int): tagawait Tag.get_or_none(idid) await tag.delete() return {message:标签删除成功}

相关新闻

水下图像增强的多尺度融合算法与实践

水下图像增强的多尺度融合算法与实践

1. 水下图像增强融合算法概述 水下图像与视频增强一直是计算机视觉领域的重要研究方向。由于水体对光线的吸收和散射作用,水下拍摄的图像普遍存在颜色失真、对比度低、细节模糊等问题。传统单一算法往往只能解决某一方面的问题,而融合算法通过结合多种技…

2026/8/27 20:26:12 阅读更多 →
为什么企业 AI 都离不开工作流?

为什么企业 AI 都离不开工作流?

为什么 LLM 不适合控制流程? 我们还是先看一个简单任务:帮我统计 Excel 销售额。 LLM 可以一次完成 但是一旦用户把任务变成:每天自动读取销售数据,如果低于目标就给负责人发消息。 那么问题就来了 因为这里出现了: 时…

2026/8/27 10:03:16 阅读更多 →
HarmonyOS应用开发实战:萌宠日记 - 日记编辑器整体布局设计

HarmonyOS应用开发实战:萌宠日记 - 日记编辑器整体布局设计

HarmonyOS应用开发实战:萌宠日记 - 日记编辑器整体布局设计 前言 日记编辑器 是 萌宠日记 的核心功能页面,用户在这里记录爱宠的日常。编辑器包含 标题输入、正文输入、照片附件、心情选择、地点天气 等完整功能模块。页面采用 顶部导航栏 Scroll 可滚…

2026/8/14 0:40:54 阅读更多 →

最新新闻

UE5游戏开发实战:构建RTS资源采集闭环系统

UE5游戏开发实战:构建RTS资源采集闭环系统

很多刚开始研究 UE5 RTS 的同学,通常会把第一个 Demo 放在“单位移动”和“兵种战斗”上,结果做到中期才发现:真正把整个玩法串起来的,其实是资源采集这一条非常基础又非常容易被小看的链路。单位走到矿脉、采集、带回基地、更新 …

2026/9/4 0:26:38 阅读更多 →
Claude API工程化:从Prompt Eval到稳定运行的关键链路

Claude API工程化:从Prompt Eval到稳定运行的关键链路

Claude Certified Architect 这套前置课程里,最容易被低估的其实不是 API 怎么调,而是 Part 5 这条从 Prompt Eval 到 Running 的完整链路。很多人拿到 Claude API 之后,第一件事就是复制一个示例请求跑通,然后以为结束了。但真正…

2026/9/4 0:26:38 阅读更多 →
企业通信NAT穿透与会话保活全解:400电话、云客服、呼叫中心、AI机器人、私有化部署单通断线根治规范

企业通信NAT穿透与会话保活全解:400电话、云客服、呼叫中心、AI机器人、私有化部署单通断线根治规范

摘要:单通、间歇性无声、通话几分钟自动断线、转接后丢媒体、外网坐席通话不稳定,是企业通信最顽固、最难复现的高频问题。绝大多数此类故障并非设备、线路、信令BUG,而是NAT端口老化、媒体端口映射失效、会话保活机制不匹配、公私网链路隔离…

2026/9/4 0:25:38 阅读更多 →
[论文分析]ZeroDayBench:面向网络防御的未知零日漏洞LLM智能体评估

[论文分析]ZeroDayBench:面向网络防御的未知零日漏洞LLM智能体评估

ZeroDayBench: Evaluating LLM Agents on Unseen Zero-Day Vulnerabilities for Cyberdefense 论文重点 ZeroDayBench是首个专门评估LLM智能体在真实零日漏洞场景下自主发现与修复能力的基准测试集。该研究通过将已知CVE漏洞移植到功能相似但代码不同的开源项目中,构…

2026/9/4 0:23:37 阅读更多 →
[论文分析]CyberSleuth:自主蓝队LLM智能体用于Web攻击取证的深度分析

[论文分析]CyberSleuth:自主蓝队LLM智能体用于Web攻击取证的深度分析

CyberSleuth: Autonomous Blue-Team LLM Agent for Web Attack Forensics 论文重点 CyberSleuth是首個系统研究LLM智能体自动化Web攻击事后取证工作的成果。该智能体以PCAP网络流量包为唯一输入,通过多智能体协作架构自动完成受害服务识别、CVE漏洞映射和攻击成功…

2026/9/4 0:23:37 阅读更多 →
澳大利亚的名义雇主平台排名是什么?

澳大利亚的名义雇主平台排名是什么?

在对2026年澳大利亚的名义雇主平台进行深入分析时,我们将重点关注各个服务商的不同特点以及其所提供的优势。从合规性到成本透明度,这些因素都会影响企业的服务选择。市场需求的变化推动了名义雇主平台的发展、而本地化支持在帮助企业应对不同市场挑战上…

2026/9/4 0:22:37 阅读更多 →

日新闻

ESP32S2嵌入式收音机全栈开发实战指南

ESP32S2嵌入式收音机全栈开发实战指南

简介:本资源是一个基于ESP32-S2芯片的嵌入式综合实践项目,面向本科毕业设计、课程设计及实训开发人员,聚焦网络收音机与FM收音机双模功能实现,融合ESP-IDF框架、ESP-ADF音频开发库与LVGL图形界面库,具备完整软硬件协同…

2026/9/4 0:00:28 阅读更多 →
WorkBuddy+Python实战:从零搭建商品库存管理系统

WorkBuddy+Python实战:从零搭建商品库存管理系统

最近想自己动手做一个“商品库存管理系统”的人变多了。很多开网店、做小团队ERP选型、或者刚学Python的读者,不是不想用系统,而是被传统开发路径劝退了:要装数据库,要写后端接口,要学前端页面,还要考虑多人…

2026/9/4 0:00:28 阅读更多 →
旅游情感分析:基于Python的垂直场景深度解析

旅游情感分析:基于Python的垂直场景深度解析

简介:本资源是一份面向计算机专业本科生的毕业设计实践项目,聚焦旅游行业真实场景,解决旅游平台对用户评论情感倾向自动识别与管理的需求。系统基于Python 3.9.11与Anaconda环境构建,集成携程、马蜂窝双平台爬虫模块,并…

2026/9/4 0:00:28 阅读更多 →

周新闻

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

2026/9/3 4:22:22 阅读更多 →
数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

2026/9/3 4:22:01 阅读更多 →
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

2026/9/3 4:22:59 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/3 4:17:49 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/3 4:18:56 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/3 4:21:44 阅读更多 →