FastAPI框架
FastAPI框架
该框架的速度(天然支持异步)比一般的django和flask要快N多倍,号称可以比肩Go
使用该框架需要保证你的python解释器版本是3.6及以上
Ps:django3.X版本也支持异步,但是它的异步功能并没有真正的实现,还有很多bug
安装
pip3 install fastapi
pip3 install unicorn
基本使用
from fastapi import FastAPI
app = FastAPI()
@app.get('/') # 点get就支持get请求
def read_root():
return {"hello":'world'}
if __name__ == '__main__':
import uvicorn
uvicorn.run(app,host='127.0.0.1',port=8080)
模版渲染
fastapi本身是没有模版渲染功能的,需要你借助于第三方的模版工具
该框架默认情况下也是借助于jinja2来做模版渲染
安装jinja2
pip3 install jinja2
基本使用
from starlette.requests import Request
from fastapi import FastAPI
from starlette.templating import Jinja2Templates
app = FastAPI()
# 挂在模版文件夹
tmp = Jinja2Templates(directory='templates')
@app.get('/')
async def get_tmp(request:Request): # async加了就支持异步
return tmp.TemplateResponse('index.html',
{'request':request, # 一定要返回request
'args':'hello world' # 额外的参数可有可无
}
)
@app.get('/{item_id}/') # url后缀
async def get_item(request:Request,item_id):
return tmp.TemplateResponse('index.html',
{'request':request,
'kw':item_id
})
if __name__ == '__main__':
import uvicorn
uvicorn.run(app,host='127.0.0.1',port=8080)
form表单数据交互
基本数据
from starlette.requests import Request
from fastapi import FastAPI,Form
from starlette.templating import Jinja2Templates
app = FastAPI()
tmp = Jinja2Templates(directory='templates')
@app.get('/') # 接受get请求
async def get_user(request:Request):
return tmp.TemplateResponse('form.html',{'request':request})
@app.post('/user/') # 接受post请求
async def get_user(request:Request,
username:str=Form(...), # 直接去请求体里面获取username键对应的值并自动转化成字符串类型
pwd:int=Form(...) # 直接去请求体里面获取pwd键对应的值并自动转化成整型
):
print(username,type(username))
print(pwd,type(pwd))
return tmp.TemplateResponse('form.html',{
'request':request,
'username':username,
'pwd':pwd
})
if __name__ == '__main__':
import uvicorn
uvicorn.run(app,host='127.0.0.1',port=8080)
文件交互
from starlette.requests import Request
from fastapi import FastAPI, Form, File, UploadFile
from starlette.templating import Jinja2Templates
from typing import List
app = FastAPI()
tmp = Jinja2Templates(directory='templates')
@app.get('/') # 接受get请求
async def get_file(request: Request):
return tmp.TemplateResponse('file.html', {'request': request})
# 单个文件
@app.post('/file/') # 接受post请求
async def get_user(request: Request,
file: bytes = File(...),
file_obj: UploadFile = File(...),
info: str = Form(...)
):
return tmp.TemplateResponse('index.html', {
'request': request,
'file_size': len(file),
'file_name': file_obj.filename,
'info':info,
'file_content_type':file_obj.content_type
})
# 多个文件
@app.post('/files/')
async def get_files(request:Request,
files_list:List[bytes] = File(...), # [文件1的二进制数据,文件2的二进制数据]
files_obj_list:List[UploadFile]=File(...) # [file_obj1,file_obj2,....]
):
return tmp.TemplateResponse('index.html',
{'request':request,
'file_sizes':[len(file) for file in files_list],
'file_names':[file_obj.filename for file_obj in files_obj_list]
}
)
if __name__ == '__main__':
import uvicorn
uvicorn.run(app, host='127.0.0.1', port=8080)
静态文件配置
from starlette.staticfiles import StaticFiles
# 挂载静态文件夹
app.mount('/static',StaticFiles(directory='static'),name='static')
# 前端
<link rel="stylesheet" href="{{ url_for('static',path='/css/111.css') }}">
<script src="{{ url_for('static',path='/js/111.js') }}"></script>
FastAPI框架的更多相关文章
- 利用本地HTTPS模拟环境为FastAPI框架集成FaceBook社交三方登录
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_174 提起社交,就不得不说马克·扎克伯格(Mark Zuckerberg)一手创办的社交网络(FaceBook).进入2020年, ...
- FastAPI框架入门 基本使用, 模版渲染, form表单数据交互, 上传文件, 静态文件配置
安装 pip install fastapi[all] pip install unicorn 基本使用(不能同时支持,get, post方法等要分开写) from fastapi import Fa ...
- 三分钟了解 Python3 的异步 Web 框架 FastAPI
快速编码,功能完善.从启动到部署,实例详解异步 py3 框架选择 FastAPI 的原因. FastAPI 介绍 FastAPI 与其它 Python-Web 框架的区别 在 FastAPI 之前,P ...
- 什么是FastAPI异步框架?(全面了解)
一:FastAPI框架 1.FastAPI是应该用于构建API的现代,快速(高性能)的 web 框架,使用Python 3.6+ 并基于标准的 Python 类型提示. 关键性: 快速: 可与Node ...
- FastApi持续更新
FastAPI 框架,高性能,易于学习,高效编码,生产可用 官方文档: https://fastapi.tiangolo.com FastAPI 是一个用于构建 API 的现代.快速(高性能)的 ...
- day02 web主流框架
day02 web主流框架 今日内容概要 手写简易版本web框架 借助于wsgiref模块 动静态网页 jinja2模板语法 前端.web框架.数据库三种结合 Python主流web框架 django ...
- asyncio异步编程【含视频教程】
不知道你是否发现,身边聊异步的人越来越多了,比如:FastAPI.Tornado.Sanic.Django 3.aiohttp等. 听说异步如何如何牛逼?性能如何吊炸天....但他到底是咋回事呢? 本 ...
- 如何利用 Python 爬虫实现给微信群发新闻早报?(详细)
1. 场景 经常有小伙伴在交流群问我,每天的早报新闻是怎么获取的? 其实,早期使用的方案,是利用爬虫获取到一些新闻网站的标题,然后做了一些简单的数据清洗,最后利用 itchat 发送到指定的社群中. ...
- 线下---复习day01
目录 1 个人介绍 2 关于编辑器 3 基础串讲 3.1 解释型和编译型 3.2 数据类型 3.2.1 一切皆对象 3.2.1 深浅copy 3.2.3 可变类型与不可变类型 3.3 字符编码 3.4 ...
随机推荐
- iOS/macOS推荐个高效苹果开发工具, JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,支持Swift/Objective-C,极速转换
CCJSON 是一款运行在macOS上 JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,可识别嵌套模型,字典/数组,支持Swift/Objective-C,操作方便,极速转换.下载 效果 ...
- 【分布式锁】07-Zookeeper实现分布式锁:Semaphore、读写锁实现原理
前言 前面已经讲解了Zookeeper可重入锁的实现原理,自己对分布式锁也有了更深的认知. 我在公众号中发了一个疑问,相比于Redis来说,Zookeeper的实现方式要更好一些,即便Redis作者实 ...
- 说说自己为什么用Mac不用Win系统?
原本Mac和Win系统各有优劣,但偏偏最近有人误导身边的朋友说"学编程肯定是Windows系统呀,Mac不行的",又不给出有说服力的理由,于是我心有愤懑,正好趁机总结一下自己对于两 ...
- pd库dataframe基本操作
一.查看数据(查看对象的方法对于Series来说同样适用) 1.查看DataFrame前xx行或后xx行 a=DataFrame(data); a.head(6)表示显示前6行数据,若head()中不 ...
- 3分钟了解GPT Bert与XLNet的差异
译者 | Arno 来源 | Medium XLNet是一种新的预训练模型,在20项任务中表现优于BERT,且有大幅度的提升. 这是什么原因呢? 在不了解机器学习的情况下,不难估计我们捕获的上下文越多 ...
- 超越Mask-RCNN:谷歌大脑的AI,自己写了个目标检测AI
这是一只AI生出的小AI. 谷歌大脑的Quoc Le团队,用神经网络架构搜索 (NAS) ,发现了一个目标检测模型.长这样: △ 看不清请把手机横过来 它的准确率和速度都超过了大前辈Mask-RCNN ...
- 性能计数器在.NET Core中的新玩法
传统的.NET Framework提供的System.Diagnostics.PerformanceCounter类型可以帮助我们收集Windows操作系统下物理机或者进程的性能指标,基于Perfor ...
- [vijos1460&Metocode P223]拉力赛<LCA>
题目链接:https://vijos.org/p/1460 http://oj.fjaxyz.com:3389/problem.php?id=223 我不禁开始怀疑,这,真的是最近公共祖先的题吗,我是 ...
- K-Folds cross-validator-K折交叉验证实现
源码: import numpy as np from sklearn.model_selection import KFold X = np.array([[, ], [, ], [, ], [, ...
- 1068 Find More Coins (30分)(dp)
Eva loves to collect coins from all over the universe, including some other planets like Mars. One d ...