1. 程式人生 > 其它 >FastAPI(七十五)實戰開發《線上課程學習系統》介面開發-- 建立課程 FastAPI(七十四)實戰開發《線上課程學習系統》介面開發-- 刪除留言

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)