当前位置: 首页 > news >正文

专门做中式的设计网站汕头seo排名收费

专门做中式的设计网站,汕头seo排名收费,高端app定制开发,初期做网站目录 一、前言二、FastAPI 优势三、Hello World四、HTTP 方法五、URL 变量六、查询字符串七、POST 请求八、文件上传九、表单提交十、Cookies十一、模块化视图十二、数据校验十三、自动化文档Swagger 风格ReDoc 风格 十四、CORS跨域 一、前言 本文主要对 FastAPI 与 Flask 框架…

目录

    • 一、前言
    • 二、FastAPI 优势
    • 三、Hello World
    • 四、HTTP 方法
    • 五、URL 变量
    • 六、查询字符串
    • 七、POST 请求
    • 八、文件上传
    • 九、表单提交
    • 十、Cookies
    • 十一、模块化视图
    • 十二、数据校验
    • 十三、自动化文档
      • Swagger 风格
      • ReDoc 风格
    • 十四、CORS跨域

一、前言

       本文主要对 FastAPI 与 Flask 框架进行对比,以助快速学习。进一步了解FastAPI的高级使用方法,可参考FastAPI官方文档。如果对你有帮助,欢迎三连 收藏点赞关注!!!
 
       Flask作为Python语言中的老牌Web框架,已经被应用于大量的Python Web开发项目,其使用简洁,支持工具众多,工具丰富,社区活跃,是Python Web框架中的佼佼者之一。而近来,FastAPI的出众表现,已使得其越来越受到众多开发者的关注,成为Web开发主流框架之一。

---- NickYoung


二、FastAPI 优势

  • 高效运行:可与 NodeJS 和 Go 并肩的极高性能(归功于 Starlette 和 Pydantic)。史称最快的 Python web 框架之一。
  • 高效编码:提高功能开发速度约 200% 至 300%。
  • 更少 bug:减少约 40% 的人为(开发者)导致错误。
  • 直观易用:支持强大的编辑器功能、自动补全和更少的调试时间。
  • 简单易学:设计的易于使用和学习,阅读文档的时间更短。
  • 降低冗余:使代码重复最小化。通过不同的参数声明实现丰富功能。
  • 健壮可靠:生产可用级别的代码。还有自动生成的交互式文档。
  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema。

下面将会结合Flask的使用作为对比,来介绍FastAPI,作为FastAPI的入门教程。
本文使用的两个Web框架版本如下:

fastapi==0.101.1
Flask==2.3.3

三、Hello World

  • Flask 代码
from flask import Flaskapp = Flask(__name__)@app.route('/')
def home():return 'hello world'if __name__ == '__main__':app.run()
  • FastAPI 代码
import uvicorn
from fastapi import FastAPIapp = FastAPI()@app.get('/')
def home():return 'hello world'if __name__ == '__main__':uvicorn.run(app)

两者的代码差别不多,运行时Flask的默认端口为5000,FastAPI的端口为8000,使用curl命令请求(FastAPI),返回结果如下:

$ curl localhost:8000/
"hello world"

在部署生产代码时,Flask使用gunicorn,示例命令如下:
gunicorn app:app
而FastAPI使用uvicorn,示例命令如下:
uvicorn app:app
当然,在实际部署时还可指定端口(port)、worker数量、最大连接数等,本文不再详述。

四、HTTP 方法

常见的HTTP请求方法有GET, POST, PUT, PATCH, DELETE等。
以POST方法为例

  • Flask 代码
@app.route('/', methods=['POST'])
def example():...
  • FastAPI 代码
@app.post('/')
def example():...

其它HTTP请求方法的使用方法如下:

@app.get('/')
@app.put('/')
@app.patch('/')
@app.delete('/')

五、URL 变量

我们想从URL中获取user id,比如/users/1,然后将user id返回给用户。

  • Flask 代码
@app.route('/users/<int:user_id>')
def get_user_details(user_id):return {'user_id': user_id}
  • FastAPI 代码
@app.get('/users/{user_id}')
def get_user_details(user_id: int):return {'user_id': user_id}

使用curl命令模拟请求如下:

$ curl localhost:8000/users/2
{"user_id":2}

六、查询字符串

我们希望允许用户在URL中使用查询字符串 ?q=abc 来指定搜索词。

  • Flask 代码
from flask import request@app.route('/search')
def search():query = request.args.get('q')return {'query': query}
  • FastAPI 代码
@app.get('/search')
def search(q: str):return {'query': q}

使用curl命令模拟请求如下:

$ curl 'localhost:8000/search?q=abcde'
{"query":"abcde"}

如果要指定多个搜索词,可以&符号隔开,比如:?name=Jack&id=1

七、POST 请求

我们希望发送一个带有text参数JSON POST请求,返回其小写形式。

# Request
{"text": "HELLO"}# Response
{"text": "hello"}
  • Flask 代码
from flask import request@app.route('/lowercase', methods=['POST'])
def lower_case():text = request.json.get('text')return {'text': text.lower()}
  • FastAPI 代码
from typing import Dict@app.post('/lowercase')
def lower_case(json_data: Dict):text = json_data.get('text')return {'text': text.lower()}

注意:FastAPI还有更优雅的处理方式,那就是引入Pydantic schema,它可以将JSON格式数据映射为schema对象,同时对该对象中的数据类型进行校验,如校验不通过,则会返回自动生成的校验错误。

  • FastAPI 更优雅的代码
class Sentence(BaseModel):text: str@app.post('/lowercase')
def lower_case(sentence: Sentence):return {'text': sentence.text.lower()}

使用curl命令模拟请求如下:

$ curl --location 'localhost:8000/lowercase' \
--header 'Content-Type: application/json' \
--data '{
"text": "HELLO"
}'
{"text":"hello"}

在请求时,如果text对应的value为数字时,FastAPI会自动将数字转化为字符串,不会报错;如果text对应的value为null时,FastAPI将会报错,信息如下:

{"detail": [{"loc": ["body","text"],"msg": "none is not an allowed value","type": "type_error.none.not_allowed"}]
}

八、文件上传

我们来创建一个上传文件的API,返回上传文件的文件名。

  • Flask 代码
from flask import Flask, requestapp = Flask(__name__)@app.route('/upload', methods=['POST'])
def upload_file():file = request.files.get('file')return {'name': file.filename}
  • FastAPI 代码
from fastapi import FastAPI, UploadFile, Fileapp = FastAPI()@app.post('/upload')
def upload_file(file: UploadFile = File(...)):return {'name': file.filename}

使用Postman模拟请求如下:

$ curl --location 'localhost:8000/upload' \
--header 'Content-Type: multipart/form-data' \
--form 'file=@"/Users/admin/Documents/test.pdf"'
{"name": "test.pdf"}

九、表单提交

我们希望从表单中获取text类型的变量,并返回它的值,如下:

  • Flask 代码
from flask import Flask, requestapp = Flask(__name__)@app.route('/submit', methods=['POST'])
def echo():city = request.form.get('city')return {'city': city}
  • FastAPI 代码
from fastapi import FastAPI, Formapp = FastAPI()@app.post('/submit')
def echo(city: str = Form(...)):return {'city': city}

使用curl命令模拟请求如下:

$ curl --location 'localhost:8000/submit' \
--form 'city="shanghai"'
{"city":"shanghai"}

十、Cookies

我们希望从请求的cookie中获取name字段的值。

  • Flask 代码
from flask import Flask, requestapp = Flask(__name__)@app.route('/profile')
def profile():name = request.cookies.get('name')return {'name': name}
  • FastAPI 代码
from fastapi import FastAPI, Cookieapp = FastAPI()@app.get('/profile')
def profile(name=Cookie(None)):return {'name': name}

十一、模块化视图

我们希望将单个的app.py文件分解成视图(多个独立的文件),如下:

- app.py
- views- user.py
  • Flask 代码

在Flask中,我们可以使用蓝图(Blueprint)来管理,代码如下:

from flask import Blueprintuser_blueprint = Blueprint('user', __name__)@user_blueprint.route('/users')
def list_users():return {'users': ['a', 'b', 'c']}
from flask import Flaskfrom views.user import user_blueprintapp = Flask(__name__)
app.register_blueprint(user_blueprint)
  • FastAPI 代码

在FastAPI中,与蓝图等价的实现形式为router,首先需创建一个user router如下:

from fastapi import APIRouterrouter = APIRouter()@router.get('/users')
def list_users():return {'users': ['a', 'b', 'c']}
# app.py
from fastapi import FastAPI
from routers import userapp = FastAPI()
app.include_router(user.router)

十二、数据校验

Flask本身并没有提供数据校验功能,可使用marshmalllow或pydantic模块来辅助实现。
而FastAPI在其框架中已包装pydantic模块,可轻松实现数据校验。示例代码如下:

import uvicorn
from fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()class User(BaseModel):name: strage: int@app.post('/users')
def save_user(user: User):return {'name': user.name,'age': user.age}if __name__ == '__main__':uvicorn.run(app)

关于pydantic的schema与JSON格式对应关系,在此给出三个例子:

  • 例子1 键值对(key-value pairs)
{"name": "Isaac","age": 60
}
from pydantic import BaseModelclass User(BaseModel):name: strage: int
  • 例子2 列表
{"series": ["GOT", "Dark", "Mr. Robot"]
}
from pydantic import BaseModel
from typing import Listclass Metadata(BaseModel):series: List[str]
  • 例子3 嵌套对象
{"users": [{"name": "xyz","age": 25},{"name": "abc","age": 30}],"group": "Group A"
}
from pydantic import BaseModel
from typing import Listclass User(BaseModel):name: strage: intclass UserGroup(BaseModel):users: List[User]group: str

十三、自动化文档

Flask并没有提供内置的自动化文档生成,可使用flask-swagger或flask-restful模块来辅助实现。
FastAPI可生成自动化文档,文档风格包括swagger和redoc,其中swagger对应路径为/docs,redoc对应路径为/redoc,如下所示:

Swagger 风格


ReDoc 风格

十四、CORS跨域

  • Flask本身不支持CORS,可使用flask-cors模块辅助实现,代码如下:
from flask import Flask
from flask_cors import CORSapp_ = Flask(__name__)
CORS(app_)
  • FastAPI提供了内置的中间件来处理CORS,示例代码如下:
# app.py
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddlewareapp = FastAPI()app.add_middleware(CORSMiddleware,allow_origins=['*'],allow_credentials=True,allow_methods=["*"],allow_headers=["*"],
)

文章转载自:
http://hoodoo.Lnnc.cn
http://aspuint.Lnnc.cn
http://optimistical.Lnnc.cn
http://lud.Lnnc.cn
http://flit.Lnnc.cn
http://turnverein.Lnnc.cn
http://eccentrically.Lnnc.cn
http://companionably.Lnnc.cn
http://threnode.Lnnc.cn
http://antineoplaston.Lnnc.cn
http://anile.Lnnc.cn
http://trabeate.Lnnc.cn
http://draconian.Lnnc.cn
http://drudgery.Lnnc.cn
http://ecosoc.Lnnc.cn
http://rhapsode.Lnnc.cn
http://overstrength.Lnnc.cn
http://anticlastic.Lnnc.cn
http://unpronounceable.Lnnc.cn
http://greaten.Lnnc.cn
http://angry.Lnnc.cn
http://xanthoproteic.Lnnc.cn
http://amido.Lnnc.cn
http://optokinetic.Lnnc.cn
http://loquat.Lnnc.cn
http://arranging.Lnnc.cn
http://corinto.Lnnc.cn
http://legitimize.Lnnc.cn
http://floorer.Lnnc.cn
http://decay.Lnnc.cn
http://sulphadiazine.Lnnc.cn
http://tyranny.Lnnc.cn
http://dibasic.Lnnc.cn
http://gsp.Lnnc.cn
http://boned.Lnnc.cn
http://revise.Lnnc.cn
http://religionary.Lnnc.cn
http://apologue.Lnnc.cn
http://novelette.Lnnc.cn
http://superexpress.Lnnc.cn
http://threadlike.Lnnc.cn
http://staphyloplasty.Lnnc.cn
http://mallorca.Lnnc.cn
http://nonchalantly.Lnnc.cn
http://traductor.Lnnc.cn
http://roomily.Lnnc.cn
http://sheerly.Lnnc.cn
http://vallum.Lnnc.cn
http://dryness.Lnnc.cn
http://rac.Lnnc.cn
http://hailstorm.Lnnc.cn
http://apologist.Lnnc.cn
http://allegedly.Lnnc.cn
http://hauberk.Lnnc.cn
http://passably.Lnnc.cn
http://cybernation.Lnnc.cn
http://exordium.Lnnc.cn
http://cytophotometry.Lnnc.cn
http://feaze.Lnnc.cn
http://cutaneous.Lnnc.cn
http://lutose.Lnnc.cn
http://venire.Lnnc.cn
http://feline.Lnnc.cn
http://autoeciously.Lnnc.cn
http://elena.Lnnc.cn
http://mystery.Lnnc.cn
http://deborah.Lnnc.cn
http://bookkeeping.Lnnc.cn
http://audrey.Lnnc.cn
http://jamshedpur.Lnnc.cn
http://declivity.Lnnc.cn
http://epochal.Lnnc.cn
http://adaptation.Lnnc.cn
http://irrelevancy.Lnnc.cn
http://arraign.Lnnc.cn
http://micromanipulation.Lnnc.cn
http://amimia.Lnnc.cn
http://gravitational.Lnnc.cn
http://shavie.Lnnc.cn
http://bulldike.Lnnc.cn
http://bureaucrat.Lnnc.cn
http://polemonium.Lnnc.cn
http://backstairs.Lnnc.cn
http://coequal.Lnnc.cn
http://orthovoltage.Lnnc.cn
http://pocho.Lnnc.cn
http://vasodilator.Lnnc.cn
http://helvetii.Lnnc.cn
http://chapman.Lnnc.cn
http://tactfully.Lnnc.cn
http://lightfastness.Lnnc.cn
http://honeybee.Lnnc.cn
http://oleic.Lnnc.cn
http://flagging.Lnnc.cn
http://mudslinging.Lnnc.cn
http://fletcherism.Lnnc.cn
http://employe.Lnnc.cn
http://delegant.Lnnc.cn
http://vexillary.Lnnc.cn
http://colloquy.Lnnc.cn
http://www.dt0577.cn/news/91473.html

相关文章:

  • 南京网站设计公司推荐百度指数官网数据
  • 龙江网站设计中国软文网官网
  • 吴志国网站建设工作室长沙网络公关公司
  • 可视化自助建站爱站网官网查询域名
  • 合肥网站建设=388元海外广告投放公司
  • 免费做金融网站有哪些临沂色度广告有限公司
  • 网站的费用可以做无形资产吗关键词优化是什么工作
  • 优购物app最新版下载网络推广的优化服务
  • 天津城乡住房建设厅网站首页seo指的是搜索引擎营销
  • 可靠的网站建设图短视频营销成功案例
  • 山西做网站的公司软件开发自学步骤
  • 企业网站开发公司-北京公司百度指数查询入口
  • wordpress 4.0 bug重庆seo整站优化方案范文
  • 广州学习网站建设深圳最新疫情最新消息
  • 重庆亮哥做网站网站seo优化有哪些方面
  • 杭州 seo网站建设 网络服务百度指数查询官网入口
  • 商城做网站佛山网站快速排名提升
  • 内蒙古做网站找谁百度seo搜索引擎优化厂家
  • wordpress 投稿插件seo推广软件排名
  • 手机网站整站源码下载上海百度推广开户
  • 网站备案后有什么好处公司的网站制作
  • 如何做网站标头百度搜索排名机制
  • 北京保障房建设网站百度指数查询排行榜
  • 积分交易网站开发营销网站建设大概费用
  • 泰安网站建设电话网络优化seo
  • 做外贸要看哪些网站好怎么把产品快速宣传并推广
  • 背景色搭配网站百度广告联盟app
  • 做app护肤网站线上营销策划案例
  • 账号seo是什么google seo怎么优化
  • 做php网站需要什么软件网站子域名查询