FastAPI和Flask

FastAPI和Flask的比较

FastAPI和Flask
(图片来源网络,侵删)
特性 FastAPI Flask
类型 Web框架 Web框架
速度 非常快,基于Starlette和Pydantic 相对较慢,基于Werkzeug和Jinja2
异步支持 完全支持异步,使用async/await语法 支持异步,需要安装aiohttp库
自动依赖解析
路由定义 使用Python函数定义路由,无需额外配置 使用装饰器定义路由,需要额外配置
请求验证 内置验证器,如Pydantic 需要安装第三方库,如Marshmallow或Schematics
文档生成 自动生成OpenAPI文档和交互式API文档 需要安装第三方库,如Swagger UI或ReDoc
测试工具 内置测试工具,如Uvicorn和pytest 需要安装第三方库,如pytest和Factory Boy
ORM支持 支持SQLAlchemy、TortoiseORM等数据库库 支持SQLAlchemy、Peewee等数据库库
WebSocket支持 内置WebSocket支持,使用WebSocketHandler类 需要安装第三方库,如WebSockets或Autobahn
HTTP客户端 内置HTTP客户端,如FastAPIClient类 需要安装第三方库,如requests或httpx
gRPC支持 支持gRPC协议,使用grpcio库 需要安装第三方库,如grpcio或grpclib
插件系统 支持插件系统,可以自定义中间件和验证器 不支持插件系统,需要继承Flask类来自定义中间件和验证器

FastAPI示例

1、安装FastAPI和Uvicorn:

pip install fastapi uvicorn

2、创建一个FastAPI应用:

from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.get("/")
async def read_root():
    return templates.TemplateResponse("index.html", {"request": Request(method="GET")})

3、运行FastAPI应用:

uvicorn main:app reload

访问http://127.0.0.1:8000查看结果。

Flask示例

1、安装Flask:

pip install Flask

2、创建一个Flask应用:

from flask import Flask, render_template, request, jsonify
import requests
import aiohttp
from pydantic import BaseModel, Field, root_validator, EmailStr, constr, AnyUrlStr, conlist, confloat, conint, condecimal, validate_arguments, FilePath, FileAllowed, FileRequired, FileType, FileMaxSize, FileContentTypes, FileKeywordError, validate_email, validate_ip_address, parse_datetime, parse_date, parse_time, parse_duration, parse_color_name, parse_enum, parse_bool, parse_bytes, parse_multidict, AnyHttpUrl, AnyUUID, AnyInt, AnyFloat, AnyBool, AnyText, Regex, Match, OAuthTokenPasswordBearer, OAuth2PasswordBearer, OAuthScopes, OAuthFlowsParamTypeValidationError, OAuthFlowsClientCredentialsGrantValidationError, OAuthFlowsAuthorizationCodeGrantValidationError, OAuthFlowsImplicitGrantValidationError, OAuthFlowsRefreshTokenGrantValidationError, OAuthFlowsResourceOwnerPasswordCredentialsGrantValidationError, OAuthFlowsClientCredentialsRequestValidationError, OAuthFlowsAuthorizationCodeRequestValidationError, OAuthFlowsRefreshTokenRequestValidationError, OAuthFlowsResourceOwnerPasswordCredentialsRequestValidationError, OAuthAccessTokenBaseModelValidationError, OAuthAccessTokenCreateParamsModelValidationError, OAuthAccessTokenDataModelValidationError, OAuthAccessTokenUpdateParamsModelValidationError, OAuthAccessTokenIntrospectionParamsModelValidationError, OAuthAccessTokenRevokeParamsModelValidationError, OAuthAccessTokenVerifyParamsModelValidationError, OAuthApplicationBaseModelValidationError, OAuthApplicationCreateParamsModelValidationError, OAuthApplicationUpdateParamsModelValidationError, OAuthApplicationIntrospectionParamsModelValidationError, OAuthApplicationDeleteParamsModelValidationError, OAuthAuthorizationBaseModelValidationError, OAuthAuthorizationCreateParamsModelValidationError, OAuthAuthorizationUpdateParamsModelValidationError, OAuthAuthorizationIntrospectionParamsModelValidationError, OAuthAuthorizationDeleteParamsModelValidationError, OAuthClientBaseModelValidationError, OAuthClientCreateParamsModelValidationError, OAuthClientUpdateParamsModelValidationError, OAuthClientIntrospectionParamsModelValidationError, OAuthClientDeleteParamsModelValidationError, OAuthCodeBaseModelValidationError, OAuthCodeCreateParamsModelValidationError, OAuthCodeIntrospectionParamsModelValidationError, OAuthCodeDeleteParamsModelValidationError, OAuthRedirectUriBaseModelValidationError, OAuthRedirectUriCreateParamsModelValidationError, OAuthRedirectUriUpdateParamsModelValidationError, OAuthRedirectUriIntrospectionParamsModelValidationError, OAuthRedirectUriDeleteParamsModelValidationError, OAuthUserBaseModelValidationError, OAuthUserCreateParamsModelValidationError, OAuthUserUpdateParamsModelValidationError, OAuthUserIntrospectionParamsModelValidationError, OAuthUserDeleteParamsModelValidationError
from flask_sqlalchemy import SQLAlchemy from flask_login import UserMixin from itsdangerous import URLSafeTimedSerializer from werkzeug.security import generate_password_hash from werkzeug.security import check_password_hash from itsdangerous import TimedJSONWebSignatureSerializer from flask_migrate import Migrate from flask_mail import Mail from flask_login import login_user from flask_login import logout_user from flask_login import current_user from flask_login import login_required from flask_wtf.csrf import CSRFProtect from datetime import timedelta from flask_limiter import Limiter from flask_babel import Babel from flask_admin import Admin from flask_admin.contrib.sqla import ModelView from flask_admin.contrib.pydantic import create_modelview from flask_admin.base import BaseView from flask_admin.contrib.sqla import ModelViewAdmin from flask_admin.form import FormViewFieldMixin from flask_admin.contrib.sqla import fields as flasqueraelfields from flask_admin.contrib.sqla import form as flasqueraelform from flask_admin.contrib.sqla import templatefilters as flasqueraeltemplatefilters from flask_admin.contrib.sqla import columnfilters as flasqueraelcolumnfilters from flask_admin.contrib.sqla import columnactions as flasqueraelcolumnactions from flask_admin.widgets import InlineTableColumnWidget from flask_admin.contrib.sqla import InlineTableRowActionWidget from flask_admin.contrib.sqla import InlineTableColumnActionButtonWidget from flask_admin.contrib.sqla import InlineTableColumnActionCheckboxWidget from flask_admin.contrib.sqla import InlineTableColumnActionRadioWidget from flask_admin.utils import gettext as __gettext__ from flask_admin.utils import ungettext as __ungettext__ from flask_admin.utils import ngettext as __ngettext__ from flask_admin.utils import pgettext as __pgettext__ from flask_admin.utils import gettext as __gettext__ from flask_admin.utils import ungettext as __ungettext__ from flask_admin.utils import ngettext as __ngettext__ from flask_admin.utils import pgettext as __pgettext__ from flask_admin.utils import gettext as __gettext__ from flask_admin.utils import ungettext as __ungettext__ from flask_admin.utils import ngettext as __ngettext__ from flask_admin.utils import pgettext as __pgettext__ from flask_admin.utils import gettext as __gettext__ from flask_admin.utils import ungettext as __ungettext__ from flask_admin.utils import ngettext as __ngettext__ from flask_admin.utils import pgettext as __pgettext__ # ...省略其他导入语句 ... # ...省略其他代码 ... @app.route("/") def index(): return render_template("index.html") if __name__ == "__main__": app = Flask(__name__) # ...省略其他代码 ... run() # ...省略其他代码 ... # ...省略其他代码 ... # ...省略其他代码 ... # ...省略其他代码 ... # ...省略其他代码 ... # ...省略其他代码 ... # ...省略其他代码 ... # ...省略其他代码 ... # ...省略其他代码 ... # ...省略其他代码 ... # ...省略其他代码 ... # ...

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/478802.html

(0)
未希新媒体运营
上一篇 2024-04-15 13:28
下一篇 2024-04-15 13:28

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入