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

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

课程编辑

先来看下课程编辑

1.判断是否登录

2.判断课程是否存在

3.是否有权限(只有自己可以修改自己的课程)

4.名称是否重复

首先,新增一个参数pydantic

复制代码
class CourseEdit(Courses):
    id: int

其次,增加主要逻辑

复制代码
def edit_course(course: CourseEdit, db: Session, user: UsernameRole):
    """编辑课程"""
    db_course = get_course_by_id(db, course.id)
    if not db_course:
        return response(code=101201, message="课程不存在")
    db_user = get_by_username(db, user.username)
    if db_user.id != course.owner:
        return response(code=101202, message="权限不足")
    exists = get_course_by_name(db, course.name)
    if exists:
        return response(code=101203, message="该课程名称已存在")
    try:
        # 这里只是修改课程的属性,上架下架不能在这改
        db_course.catalog = course.catalog
        db_course.desc = course.desc
        db_course.icon = course.icon
        db_course.name = course.name
        db.commit()
        db.refresh(db_course)
    except:
        logger.warning(f"method edit_course error:{traceback.format_exc()}")
        return response(code=101204, message="修改失败")
    return response()

最后,实现接口api

复制代码
@course_router.put("/", summary="编辑课程")
def edit(
        course: CourseEdit,
        db: Session = Depends(create_db),
        user: UsernameRole = Depends(get_current_user)):
    return edit_course(course, db, user)

测试:

查看评论

接下来看下查看评论

1.判断课程是否存在

2.存在返回所有评论

主要逻辑

复制代码
def get_course_comment(course_id: int, db: Session):
    """获取课程评论"""
    db_course = get_course_by_id(db, course_id)
    if not db_course:
        return response(code=101301, message="课程不存在")
    comments = get_comment_by_course_id(db, course_id)
    to_client = []
    if comments:
        for _ in comments:
            detail_comment = CourseCommentOut(
                id=_.id,
                top=_.top,
                user=get_by_uid(db, _.user).username,
                pid=_.pid,
                add_time=str(_.add_time),
                context=_.context
            )
            to_client.append(detail_comment.dict())
    return response(data=to_client)

因为course_schema.py中的CourseComment和models中的重名了,所以做了修改

复制代码
class CourseCommentOut(CourseCommentBase):
    id: int
    top: int


class CourseDetail(Courses):
    id: int
    owner: str  # 此处重写该字段,返回给客户端时展示用户名而非id
    comment: List[CourseCommentOut] = []

实现api

复制代码
@course_router.get("/course_comment", summary="查看课程评论")
def course_comment(course_id: int,
        db: Session = Depends(create_db)):
    return get_course_comment(course_id, db)

测试

这样我们的课程编辑和查看评论接口就完成了

相关推荐
还是鼠鼠21 小时前
AI掘金头条新闻系统 (Toutiao News)-缓存相关推荐新闻
后端·python·mysql·fastapi·web
ednO8nqdR1 天前
Python小游戏制作:如何实现可配置的跨分辨率界面布局
python·plotly·django·virtualenv·scikit-learn·fastapi·pygame
曲幽1 天前
从卡顿到丝滑:FastAPI 调用外部 API 的正确姿势(httpx 实战)
python·fastapi·web·async·httpx·client·await·requests·aiohttp
泡^泡1 天前
FastAPI基础入门
fastapi
闲猫2 天前
Python FastAPI + SQLAlchemy 入门教程:从零搭建你的第一个 Web 应用
前端·python·fastapi
llilay2 天前
企业级FastAPI后端模板搭建(六)加密用户密码
windows·fastapi
sukioe2 天前
从 0 到 1 构建城市公共设施智能报修与派单系统:FastAPI + Vue3 + RabbitMQ + Redis Geo + AI 工作流实践
redis·rabbitmq·fastapi
L-影2 天前
FastAPI 请求头与 Cookie:Web 世界的“身份证”与“通行证”
前端·fastapi
L-影2 天前
FastAPI CORS 跨域:Web 世界的“小区门禁”与“访客通行证”
前端·javascript·fastapi
元Y亨H3 天前
Python - FastAPI 全方位介绍
python·fastapi