fastapi教程

简介

一个现代Python网络框架,它基于Starlette框架,可用于构建REST API。与知名的API标准完全兼容,即OpenAPI和JSON模式。

FastAPI没有内置任何服务器应用程序。为了运行FastAPI应用程序,你需要一个名为 uvicorn 的ASGI(Asynchronous Server Gateway Interface)服务器。符合 WSGI (Web Server Gateway Interface – 较早的标准)的Web服务器不适合 asyncio 应用。它还提供了对HTTP/2和WebSockets的支持,这些都是WSGI无法处理的。

示例

from fastapi import FastAPI
import uvicorn

app = FastAPI()

@app.get("/") #表示路径,即url
async def index():#async告诉FastAPI,它将被异步运行,即不阻塞当前执行线程
   return {"message": "Hello World"}#返回一个JSON响应,也可以返回 dict、list、str、int、pydantic模型等等
uvicorn.run(app, host='localhost',
       port=‘8000’, log_level="debug", timeout_keep_alive=5)

Starlette

Starlette 是一个轻量级的 ASGI 框架和工具包,特别适合用来构建高性能的 asyncio 服务。

#example.py
from starlette.responses import JSONResponse
from starlette.routing import Route

async def homepage(request):
    return JSONResponse({'hello': 'world'})

app = Starlette(debug=True, routes=[
    Route('/', homepage),
])

命令行启动:

uvicorn example:app

 uvicorn

Uvicorn 是基于 uvloop 和 httptools 构建的非常快速的 ASGI 服务器。

# example.py
async def app(scope, receive, send):
    assert scope['type'] == 'http'
    await send({
        'type': 'http.response.start',
        'status': 200,
        'headers': [
            [b'content-type', b'text/plain'],
        ]
    })
    await send({
        'type': 'http.response.body',
        'body': b'Hello, world!',
    })

命令行启动:

uvicorn example:app

 脚本启动:

import uvicorn

async def app(scope, receive, send):
    # 同上
#启动服务器后,执行curl http://127.0.0.1:5000就可以看到hello world
if __name__ == "__main__":
    uvicorn.run("example:app", host="127.0.0.1", port=5000, log_level="info")#example是与文件名相同

Pydantic

Pydantic 用于数据解析和验证,它定义了 BaseModel 类,充当用户自定义类的基类。

from typing import List
from pydantic import BaseModel
class Student(BaseModel):
   id: int
   name :str
   subjects: List[str] = []

data = {
   'id': 1,
   'name': 'Ravikumar',
   'subjects': ["Eng", "Maths", "Sci"],
}
s1=Student(**data)
print(s1) #id=1 name='Ravikumar' subjects=['Eng', 'Maths', 'Sci']

Pydantic 会尽可能地自动转换数据类型。例如,字典中的id本来接受int,但是被分配了一个字符串表示的数字(比如’123’),它也会强转成一个整数。但是如果失败,就会引发一个异常。 

Pydantic还包含一个Field类,用于声明模型属性的元数据和验证规则。

from typing import List
from pydantic import BaseModel, Field
class Student(BaseModel):
   id: int #第一个参数含义是默认值,第二个title是描述,第三个是限制,此处限制name长度不超过10
   name :str = Field(None, title="The description of the item", max_length=10)
   subjects: List[str] = []

REST架构

关系状态转移 (REST)是一种软件架构风格。REST定义了一个网络应用程序的架构应该如何表现。它是一种基于资源的架构,REST服务器所承载的一切(一个文件、一张图片或数据库表中的一行)都是一种资源,有许多表现形式。

HTTP动作

动作 含义
get 以未加密的形式向服务器发送数据。最常见的方法。
head 与get相同,但没有响应体
post 用来向服务器发送HTML表单数据。由post方法收到的数据不会被服务器缓存。
put 用上传的内容替换目标资源的所有当前表示
delete 删除由URL给出的目标资源的所有当前表示

你可能感兴趣的:(Python学习,fastapi,服务器)