阅读量:0
源码见:"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)
测试
这样我们的课程编辑和查看评论接口就完成了