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