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

阿里云 网站空间微信网站响应式网站

阿里云 网站空间,微信网站响应式网站,.net做网站,新手建网站什么类型好原文#xff1a;python简单进阶之web框架#xff1a;fastapi使用教程 - 知乎 这是简单进阶教程系列第四篇#xff0c;本系列文章主要介绍那些可以很快上手的进阶库。 我其实学过一段时间Django框架#xff0c;但是半途而废了#xff0c;我觉得可能还是简单一点的框架比较适…原文python简单进阶之web框架fastapi使用教程 - 知乎 这是简单进阶教程系列第四篇本系列文章主要介绍那些可以很快上手的进阶库。 我其实学过一段时间Django框架但是半途而废了我觉得可能还是简单一点的框架比较适合我吧…… 官方教程https://fastapi.tiangolo.com/ 安装 要求 python3.6版本及以上 pip install fastapi pip install uvicorn教程 第一步 from fastapi import FastAPIapp FastAPI() # 创建API实例app.get(/) async def root():return {message: Hello World}代码解释 app.get(/)功能是定义路径操作代表着访问example.com/时执行GET操作。 路径即网址第一个斜杠到最后的部分比如 https://example.com/items/foo的路径就是 /items/foo通常也称为端点或 路由 操作即GETPOSTPUTDELETE等HTTP方法 在python中 something被称为装饰意味着采用下面的函数进行处理。 async def是定义异步函数的方法你也可以定义为普通函数def 简单来说如果你的程序不需要执行的先后顺序比如先访问数据库再返回字典那么可以用异步否则的话用普通的函数即可 return可以返回dictliststrint等等。 运行 将其复制到main.py打开cmd输入uvicorn main:app --reload即可运行。 参数解释。  main文件 main.py。 app main.py内创建的对象 app FastAPI()。 --reload更改代码后服务器重新启动仅用于开发。 打开浏览器输入地址http://127.0.0.1:8000即可看到成功返回 {message: Hello World} 输入http://127.0.0.1:8000/docs即可看到交互式文档输入http://127.0.0.1:8000/redoc即可看到API文档。 路径参数 传递参数 from fastapi import FastAPIapp FastAPI()app.get(/items/{item_id}) async def read_item(item_id):return {item_id: item_id}使用大括号将输入的参数括起来即可将同名参数传递给下面的函数。 输入http://127.0.0.1:8000/items/foo返回{item_id:foo} 参数类型 app.get(/items/{item_id}) async def read_item(item_id: int):return {item_id: item_id}使用def func(para:type)的格式定义参数数据类型。 这样也有将输入参数自动进行类型转换的效果比如http://127.0.0.1:8000/items/3那么返回的就是个int而不是str。当然如果无法转换也会有友好的错误提示。 比如输入http://127.0.0.1:8000/items/fool或http://127.0.0.1:8000/items/3.2都会返回错误 创建枚举类 from enum import Enum from fastapi import FastAPIclass ModelName(str, Enum):alexnet alexnetresnet resnetlenet lenetapp FastAPI()app.get(/model/{model_name}) async def get_model(model_name: ModelName):if model_name ModelName.alexnet:return {model_name: model_name, message: Deep Learning FTW!}if model_name.value lenet:return {model_name: model_name, message: LeCNN all the images}return {model_name: model_name, message: Have some residuals}如果有好几个预定义参数有相同的数据类型那么可以使用enum模块并通过类名.参数名调用。 PSalexnet、resnet、lenet都是机器学习术语可以换成任何参数。 它最大的好处就是可以在文档中显示可用参数 查询参数 声明不属于路径参数的其他功能参数时它们将自动被解释为“查询”参数。 from fastapi import FastAPIapp FastAPI()fake_items_db [{item_name: Foo}, {item_name: Bar}, {item_name: Baz}]app.get(/items/) async def read_item(skip: int 0, limit: int 10):return fake_items_db[skip : skip limit]在HTTP路径中查询参数表现为URL中位于?之后以字符分隔的键值对。 比如http://127.0.0.1:8000/items/?skip0limit1即skip为0limit为1 返回[{item_name:Foo},{item_name:Bar}] 默认值 上面例子中skip: int 0即设定skip参数默认为0那么我们访问http://127.0.0.1:8000/items/等同于http://127.0.0.1:8000/items/?skip0limit10 可选参数 把默认值设为None即可如q: str None 多路径和查询参数组合 from fastapi import FastAPIapp FastAPI()app.get(/users/{user_id}/items/{item_id}) async def read_user_item(user_id: int, item_id: str, q: str None, short: bool False ):item {item_id: item_id, owner_id: user_id}if q:item.update({q: q})if not short:item.update({description: This is an amazing item that has a long description})return item请求体 注要使用请求体就不能使用GET操作而用POST较常见 PUTDELETE或PATCH。 from fastapi import FastAPI from pydantic import BaseModel# 将数据模型定义为继承BaseModel的类 class Item(BaseModel):name: strdescription: str Noneprice: floattax: float Noneapp FastAPI()app.put(/items/{item_id}) async def create_item(item_id: int, item: Item, q: str None):result {item_id: item_id, **item.dict()}if q:result.update({q: q})return result看起来有丶复杂不过我们用python请求一下就知道怎么回事了。 import requests import jsonbody {name: yanshu,description: yanshus blog,price: 100,tax: 0}body json.dumps(body) # 需要先解析response requests.put(http://127.0.0.1:8000/items/3,data body) print(response.text)返回 {item_id:3,name:yanshu,description:yanshus blog,price:100.0,tax:0.0} 字符串验证 本节讲一下如何限定输入字符串的格式比如最大输入字符数必须含有XXX等等。 from fastapi import FastAPI, Queryapp FastAPI()app.get(/items/) async def read_items(q: str Query(None, min_length3,max_length50)): # q的最大长度为50最小长度为3results {items: [{item_id: Foo}, {item_id: Bar}]}if q:results.update({q: q})return results正则表达式如q: str Query(None, min_length3, max_length50, regex^fixedquery$) 上述例子都是为q添加了一个默认参数None也就是让它变成了可选参数那我如何把它变成必须参数呢很简单 def read_items(q: str Query(..., min_length3)):查询多个参数值 from typing import List from fastapi import FastAPI, Queryapp FastAPI()app.get(/items/) async def read_items(q: List[str] Query(None)):query_items {q: q}return query_items这样http://localhost:8000/items/?qfooqbar就会同时查询q为foo和bar的情况。 当然也可以指定默认值 async def read_items(q: List[str] Query([foo, bar])):别名参数 from fastapi import FastAPI, Queryapp FastAPI()app.get(/items/) async def read_items(q: str Query(None, aliasitem-query)):results {items: [{item_id: Foo}, {item_id: Bar}]}if q:results.update({q: q})return results这样你就可以http://127.0.0.1:8000/items/?item-queryfoobaritems 已弃用参数 deprecatedTrue这样这个参数仍然能用但是文档中就会显示这个参数已经不再维护。 部署 直接使用 uvicorn main:app --host 0.0.0.0 --port 8000即可 注意main后面直接:app 如何持续后台运行 安装screen yum install screen # centosapt-get update -y #Debian apt-get install screen -y 使用 screen -S name # 创建一个名为name的screen窗口 screen -ls # 查看所有窗口 screen -r name # 返回名为name的窗口 exit # 退出当前窗口 虽然官方推荐gunicorn但是我用的时候直接报 Internal Server Error错误没办法只能曲线救国了 想使用自己的域名 很简单用宝塔反向代理即可如果想要加SSL的话就不能使用文件验证而要用DNS验证。
http://www.pierceye.com/news/597649/

相关文章:

  • 广东省石油化工建设集团公司网站炫酷个人网站
  • 石家庄模板建站代理什么网站可以自己做字
  • 公司想做个网站应该怎么做河南郑州网站设计公司
  • 建电影网站赚钱挣钱吗网站互动功能
  • 流浪动物网站开发巴中手机网站建设
  • 吕梁网站建设kuyiso手机网站建设 jz.woonl
  • 电脑和手机都能浏览的网站开发设计学类包括哪些专业
  • 网站规划与建设评分标准网站中竖导航栏怎么做
  • 网站备案规定周到的商城网站建设
  • 考幼师证去哪个网站做试题如何分析网站建设
  • 济南智能网站建设哪家好化工网站建设推广
  • 福州 网站定制设计稿定设计官方免费下载
  • 统计局网站建设情况南宁做网站优化的公司
  • 免费的软件网站建设北京建设厅网站查询
  • 没有公司做网站短网址短链接生成器
  • 利于seo优化的网站网站怎么上传到空间
  • 寿阳网站建设开发网站的硬件成本
  • 做网站的叫什么软件众筹网站开发
  • 鲜花网网站开发的目标河南郑州建设网站
  • 做网站上哪买空间帝国网站管理系统安装连接不上数据库
  • 做前端网站用什么工具网站备案后怎么做实名认证
  • 做兼职那个网站比较好重庆的seo服务公司
  • 网站建设流费用南通seo排名公司
  • 河北邢台移动网站建设单片机做网站
  • 佛山网站制作的公司做文库网站怎么赚钱吗
  • 博客网站 做淘宝客咸阳网站建设推广
  • 佛山手机网站建设优化做网站要多大的画布
  • 网站结构优化包括什么网站建设定制开发
  • 做装修的有那些网站wordpress获取用户位置
  • 找事做网站公司网站网页设计