Python Web Dev

ForHHeart發表於2024-09-06

FastAPI

Starlette負責web部分(Asyncio)
Pydantic負責資料部分(型別提示)

FastAPI是站在前人肩膀上,整合了多種框架的優點的新秀框架。它出現的比較晚,2018年底才釋出在github上。廣泛應用於當前各種前後端分離的專案開發,測試運維自動化以及微服務的場景中。

預備知識點

http協議

1.什麼是請求頭請求體,響應頭響應體
2.URL地址包括什麼
3.get請求和post請求到底是什麼
4.Content-Type是什麼

  • HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於全球資訊網(WWW:World Wide Web)伺服器與本地瀏覽器之間傳輸超文字的傳送協議。

    • 超文字:超文字就是指“含有指向其他資源連結”內容的文字。
      • 大概就是,不僅僅是文字,還有多媒體:影片、圖片、動畫等。
    • 協議:HTTP協議就是伺服器(Server)和客戶端(Client)之間進行資料互動(相互傳輸資料)的一種協議。
      • 我們可以將Server和Client進行擬人化,那麼該協議就是Server和Client這兩兄弟間指定的一種互動溝通方式。
  • HTTP是一個屬於應用層的物件導向的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。

    • 它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴充套件。
    • HTTP協議工作於客戶端-服務端架構為上。
      • 瀏覽器作為HTTP客戶端透過URL向HTTP服務端即WEB伺服器傳送所有請求。
      • Web伺服器根據接收到的請求後,向客戶端傳送響應資訊。
Python Web Dev

一個完整的URL包括:協議、ip、埠、路徑、引數
例如: https://www.baidu.com/s?wd=yuan 其中https是協議,www.baidu.com 是IP,埠預設80,/s是路徑,引數是wd=yuan

請求方式: get與post請求

  • GET提交的資料會放在URL之後,以?分割URL和傳輸資料,引數之間以&相連,如EditBook?name=test1&id=123456.
  • POST方法是把提交的資料放在HTTP包的請求體中.
  • GET提交的資料大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的資料沒有限制,且攜帶的請求資料不可以明文方式連線在url中。
    響應狀態碼:狀態碼的職責是當客戶端向伺服器端傳送請求時, 返回的請求結果。藉助狀態碼,使用者可以知道伺服器端是正常處理了請求,還是出現了錯誤。狀態碼如200 OK,以3位數字和原因組成。

Request
Client->Server
Client->Static->(uvicorn)->[Router->Function->Database]

Response
Server->Client
[Database->Function->Router]->(uvicorn)->Static->Client

Request First Row
Method IP Path Query

Request Headers
Content-type

  • application/json
  • application/x-www-form-uniencoded

Request Body
Parameter

  • Path /
  • Query

Response First Row
Response Headers
Response Body

from fastapi import FastAPI
from api.student import api_student

app = FastAPI()
app.include_router(api_student, prefix=“student”, tags=[“選課系統的學生介面”])


from fastapi import APIRouter
from pydantic import BaseModel

api_student = APIRouter()

class UserIn(BaseModel):
       username: str
       description: Optional[str]=None
       email: EmailStr
       full_name: Optional[str]=None

class UserOut(BaseModel):
       username: str
       email: EmailStr
       full_name: Optional[str]=None


@app.post(“/user”, response_model=UserOut)
async def create_user(user: UserIn)
        return {
        “user”: user
}

FESTful API principle

get
/student 檢視學生列表

post
/student 新增學生

get
/student/1 檢視id=1的學生

put
/student/1 更新id=1的學生

delete
/student/1 刪除id=1的學生

ORM

ORM(Object Relationship Mapper)

SQLAlchemy

Asyncio

相關文章