FastAPI(七十八)实战开发《在线课程学习系统》接口开发-- 评论

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统"

梳理下思路

1.判断是否登录

2.课程是否存在

3.如果是回复,查看回复是否存在

4.是否有权限

5.发起评论

首先新增pydantic模型

class CourseCommentModel(BaseModel):"""发起评论参数"""id: intcomment: str = Field(min_length=1)pid: Optional[int] = None

其次实现主要逻辑


def to_comment_method(comment: CourseCommentModel, user: UsernameRole, db: Session):"""发起评论"""db_user = get_by_username(db, user.username)db_course = get_course_by_id(db, comment.id)if not db_course:return response(code=101401, message="课程不存在")if db_course.owner == db_user.id and comment.pid is None:return response(code=101404, message="自己不能评论自己的课程")if comment.pid:pid_course = get_course_by_id(db, comment.pid)if not pid_course:return response(code=101405, message="回复的评论不存在")return create_comment(db, comment, db_user.id)return create_comment(db, comment, db_user.id)def create_comment(db: Session, comment: CourseCommentModel, user: int):"""保存评论"""# 前提:自己不能给自己的课程发起评论,但是发起评论后可以给自己的评论回复try:to_db_comment = CourseComment(course=comment.id,user=user,pid=comment.pid,context=comment.comment)to_db_comment.user = userdb.add(to_db_comment)db.commit()db.refresh(to_db_comment)except:logger.warning(f"method create_comment error: {traceback.format_exc()}")return response(code=101402, message="评论失败")return response()

最后,实现接口api

@course_router.post("/course_comment", summary="发起评论")
def to_comment(comment: CourseCommentModel, user: UsernameRole = Depends(get_current_user),db: Session = Depends(create_db)):return to_comment_method(comment, user, db)

测试

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

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

相关文章

python当键存在时向值添加元素,键不存在时则新建的简洁方法

在 Python 中,可以使用字典来存储集合对象,并且在键存在时向集合中添加元素,键不存在时则新建一个集合并添加元素。可以使用 dict.setdefault() 方法来简化这个过程,或者手动检查键是否存在。 下面是一些示例代码: 使…

音视频入门基础:WAV专题(2)——WAV格式简介

注:本文有部分内容引用了维基百科:https://zh.wikipedia.org/wiki/WAV 一、引言 Waveform Audio File Format(缩写WAVE或WAV)是微软与IBM公司所开发在个人电脑存储音频流的编码格式,在Windows平台的应用软件受到广泛的…

AI/机器学习(计算机视觉/NLP)方向面试复习3

1. Pooling 有哪些方式?pytorch的实现? Pooling可以分成:最大池化,平均池化,全局平均池化,随机池化,空间金字塔池化。 1. 最大池化(Max Pooling) 最大池化是最常用的池…

union的特性和大小端

一、union在c和c语言中的特性 1.共享内存空间:union的所有成员共享同一块内存空间。意味着在同一时刻,union 只能存储其成员 中的一个值。当你修改了union中的一个成员,那么其它成员的值也会被改变,因为它们实际上都是指向同一块…

JS逆向高级爬虫

JS逆向高级爬虫 JS逆向的目的是通过运行本地JS的文件或者代码,以实现脱离他的网站和浏览器,并且还能拿到和浏览器加密一样的效果。 10.1、编码算法 【1】摘要算法:一切从MD5开始 MD5是一个非常常见的摘要(hash)逻辑. 其特点就是小巧. 速度快. 极难被破解. 所以,…

skywalking docker部署

skywalking-oap # 拉取skywalking-oap镜像 docker pull apache/skywalking-oap-server:9.7.0# 启动容器 docker run --name oap \ -d \ -p 11800:11800 \ -p 12800:12800 \ apache/skywalking-oap-server:9.7.0skywalking-ui # 摘取skywalking-ui镜像 docker pull apache/sky…

大屏使用技巧——如何实现数据分发

当多个组件需共用同一数据源时,为了减少重复请求,需要进行数据分发。那如何实现接一次数据就能让多个组件映射同一数据源中的不同数据字段呢? 实现思路 目标组件的静态数据中添加标记字段,数据过滤器内通过 data 参数获取到对应…

加密micropython写的程序为.mpy的方法

2024年7月26日 用虚拟机安装一个Linux,本例为CentOS7的Linux系统。 1.保证Linux能够连接网络。 2.进入root用户,使用下面的命令行安装gcc编译器: yum install gcc 3.安装完成后,查看gcc是否安装成功,用下面的命令…

家政项目小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,家政人员管理,家政服务管理,咨询信息管理,咨询服务管理,家政预约管理,留言板管理,系统管理 微信端账号功能…

前端开发知识-vue

大括号里边放键值对,即是一个对象。 一、vue可以简化前端javascript的操作。 主要特点是可以实现视图、数据的双向绑定。 使用vue主要分为三个步骤: 1.javascript中引入vue.js 可以src中可以是vue的网址,也可以是本地下载。 2.在javasc…

C#中的泛型约束:如何利用泛型约束来提高代码的类型安全性和灵活性?

泛型约束是指可以对泛型类型参数进行限制,只允许特定类型或满足特定条件的类型作为泛型参数。使用泛型约束可以提高代码的类型安全性和灵活性,以下是一些常见的泛型约束及其作用: 类型约束(class constraint)&#xff…

FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 加入课程 我们先看下加入课程 1.是否登录 2.课程是否存在 3.是否已经存在 4.添加 首先实现逻辑 def get_student_course(db: Session, course: int…

C++——QT:保姆级教程,从下载到安装到用QT写出第一个程序

登录官网,在官网选择合适的qt版本进行下载 这里选择5.12.9版本 点击exe文件下载,因为服务器在国外,国内不支持,所以可以从我的网盘下载 链接: https://pan.baidu.com/s/1XMILFS1uHTenH3mH_VlPLw 提取码: 1567 --来自百度网盘超级…

Github使用技巧

(1)基本操作: Github 点击绿色按键Code 复制地址,打开自己本地想要保存的文件夹,右键,Git Bach Here git clone 地址 --下载☆star:可以衡量该程序的热度和知名度README.md 是使用一个项目前必须要阅…

本地部署Graphhopper路径规划服务(graphhopper.sh启动版)

文章目录 文章参考源码获取一、配置Java环境变量二、配置Maven环境变量三、构建graphhopper步骤1. 下载数据2. 配置graphhopper配置文件config-example.yml3. 在项目中启动命令行执行./graphhopper.sh build3.1|、遇到的问题3.1.1、pom.xml中front-maven-plugin-无法下载npm6.1…

使用 nmcli 管理网络连接

nmcli 是 NetworkManager 的命令行工具,它提供了一种方便的方式来管理网络连接、查看网络状态以及进行网络配置。无论你是在服务器环境中,还是在没有图形界面的桌面系统中,nmcli 都是一个强大的网络管理工具。本文将介绍 nmcli 的基础用法及一…

【python代码不需要额外的操作就能交换两个变量的值】

看到一个案例,想着用Python代码实现一下,不需要额外的操作就能交换两个变量的值 def swap(a, b):return b, a a, b -1, 14 swap(a, b) # (14, -1) spread([1,2,3,[4,5,6],[7],8,9]) # [1,2,3,4,5,6,7,8,9]在Python中,确实存在一种非常简洁的…

JavaScript 的奇技淫巧

JavaScript 作为一门动态语言,拥有丰富的特性和灵活性。这使得开发者们能够编写出既强大又高效的代码。然而,在某些情况下,为了追求代码的精简或性能优化,开发者可能会采用一些非传统的技巧。接下来,我们一起探索一些这…

土耳其云手机提升TikTok电商效率

在数字化飞速发展的今天,TikTok不仅是一个社交平台,更是一个巨大的电商市场。随着TikTok电商功能在全球范围内的扩展,土耳其的商家和内容创作者正面临着前所未有的机遇。本文将详细介绍土耳其云手机怎样帮助商家抓住机遇,实现业务…

项目都做完了,领导要求国际化????--JAVA后端篇

springboot项目国际化相信各位小伙伴都会,很简单,但是怎么项目都做完了,领导却要求国际化文件就很头疼了 国际化的SpringBoot代码: 第一步:创建工具类 /*** 获取i18n资源文件** author bims*/ public class Message…