FastAPI(七十五)實戰開發《在線課程學習系統》接口開發-- 創建課程 FastAPI(七十四)實戰開發《在線課程學習系統》接口開發-- 刪除留言

上次我們分享了,FastAPI(七十四)實戰開發《在線課程學習系統》接口開發-- 刪除留言

 

 還是按照慣例,我們去梳理下對應的邏輯

1.判斷用戶是否登陸
2.校驗是否有權限
3.校驗參數是否完整
4.查詢課程是否存在
5.創建課程

課程我們需要單獨創建一個新的路由來管理

        我們在routers去創建course.py

from fastapi import APIRouter
from models.crud import *
from models.get_db import get_db
courseRouter = APIRouter()

  

 接着我們的main.py去引入

from routers.course import courseRouter
app.include_router(courseRouter,prefix='/course',tags=['course'])

 

        這樣我們的新的路由就生效了。  

        我們去看下是如何實現創建課程?

        首先我們去創建課程創建的pydantic 類。

class Courses(BaseModel):
   name: str
   icon: Optional[str]
   desc: Optional[str]
   catalog: Optional[str]
   onsale: Optional[int]
   owner: str
   likenum: int

 那麼我們去實現對應的crud

#創建課程
def db_create_course(db: Session, course: Courses, user: int):
   course = Course(**course.dict())
   course.owner=user
   db.add(course)
   db.commit()  # 提交保存到數據庫中
   db.refresh(course)  # 刷新
   return course


#根據課程名稱獲取
def db_get_course_name(db:Session,name:str):
   return db.query(Course).filter(Course.name==name,Course.status==False).first()

  

根據開發中,我們發現之前設計的狀態碼需要補充

101004只有老師才能創建課程
101005 課程名長度應該在2-50
101006 課程上架狀態不對

    那麼對應的業務代碼最後實現如下

@courseRouter.post(path='/create')
async  def create(coursescreate:Courses,
                  db: Session = Depends(get_db),user: UsernameRole = Depends(get_cure_user)):
    user_=get_user_username(db,user.username)
    user_role=get_role_name(db,user_.role)
    if not user_role or user_role.mame =="學生":
        return  reponse(code=101004,message='只有老師才能創建課程',data='只有老師才能創建課程')
    if len(coursescreate.name)>50 or len(coursescreate.name)<2:
        return reponse(code=101005,message='課程名長度應該在2-50',data='')
    if coursescreate.onsale !=0 or coursescreate.onsale !=1:
        return reponse(code=101006,message='課程上架狀態不對',data='')
    name=db_get_course_name(db,coursescreate.name)
    if name:
        return reponse(code=101002,message='課程名稱不能重複',data='課程名稱不能重複')
    couse=db_create_course(db,coursescreate,user_.id)
    return reponse(code=200,message='成功',data=couse)

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章