跳转到主要内容

flake8插件,用于检查FastAPI代码与有意见的风格规则 🤓

项目描述

flake8-fastapi

Latest Commit
Package version

一个flake8插件,帮助您避免简单的FastAPI错误。

安装

首先,安装包

pip install flake8-fastapi

然后,使用flake8检查插件是否已安装

$ flake8 --version
3.9.2 (flake8-fastapi: 0.2.0, mccabe: 0.6.1, pycodestyle: 2.7.0, pyflakes: 2.3.1) CPython 3.8.11 on Linux

规则

CF001 - 路由装饰器错误

以前使用flask的开发者可能会被说服或想要在FastAPI中使用相同的模式

from fastapi import FastAPI

app = FastAPI()


@app.route("/", methods=["GET"])
def home():
    return "Hello world!"

但在FastAPI中,我们有更简单的方式来定义这一点(这是创建端点最知名的方式)

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def home():
    return "Hello world!"

CF002 - 路由前缀错误

在旧的FastAPI版本中,我们能够在include_router方法上添加前缀

from fastapi import APIRouter, FastAPI

router = APIRouter()


@router.get("/")
def home():
    ...


app = FastAPI()
app.include_router(router, prefix="/prefix")

现在,在Router初始化中就可以添加前缀了

from fastapi import APIRouter, FastAPI

router = APIRouter(prefix="/prefix")


@router.get("/")
def home():
    ...


app = FastAPI()
app.include_router(router)

CF008 - CORSMiddleware顺序

有一个关于CORSMiddleware复杂问题,人们通常不太了解。那就是这个中间件应该是中间件堆栈中的最后一个。您可以在这里了解更多信息这里

让我们看看一个不工作的例子

from fastapi import FastAPI

app = FastAPI()

app.add_middleware(
    CORSMiddleware,
    allow_origins=['*'],
    allow_credentials=True,
    allow_methods=['*'],
    allow_headers=['*']
)
app.add_middleware(GZipMiddleware)

正如你所见,最后添加的中间件不是CORSMiddleware,所以它不会按预期工作。另一方面,如果你改变顺序,它就会。

from fastapi import FastAPI

app = FastAPI()

app.add_middleware(GZipMiddleware)
app.add_middleware(
    CORSMiddleware,
    allow_origins=['*'],
    allow_credentials=True,
    allow_methods=['*'],
    allow_headers=['*']
)

CF009 - 未记录的HTTPException

目前,除了实验性的包fastapi-responses之外,没有自动化的方法来记录HTTPException

因此,很容易忘记文档,并且有很多未记录的端点。让我们看一个例子

from fastapi import FastAPI, HTTPException

app = FastAPI()


@app.get("/")
def home():
    raise HTTPException(status_code=400, detail="Bad Request")

上述端点没有responses字段,即使很清楚响应将有400状态码。

CF011 - 无内容响应

目前,如果你尝试发送一个无内容的响应(204),FastAPI将发送一个204状态,但主体不为空。它将以4字节的内容长度发送主体内容。

你可以运行以下代码来验证此声明

# main.py
from fastapi import FastAPI

app = FastAPI()


@app.get("/", status_code=204)
def home():
    ...

现在可以自由运行你喜欢的服务器实现

uvicorn main:app

然后使用curl或其他工具发送请求

$ curl localhost:8000
*   Trying 127.0.0.1:8000...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8000 (#0)
> GET / HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 204 No Content
< date: Sat, 24 Jul 2021 19:21:24 GMT
< server: uvicorn
< content-length: 4
< content-type: application/json
<
* Connection #0 to host localhost left intact

这与RFC相矛盾,该RFC指定204响应不应有主体。

许可证

本项目采用MIT许可协议。

项目详情


下载文件

下载适合你平台的文件。如果你不确定该选择哪个,了解更多关于安装包的信息。

源分布

flake8-fastapi-0.7.0.tar.gz (9.0 kB 查看散列值)

上传时间

构建分布

flake8_fastapi-0.7.0-py3-none-any.whl (9.8 kB 查看散列值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面