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 ...
随机推荐
- 使用 Docker 部署 Spring Boot 项目
Docker 介绍 Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口.它是目前最流行的 Linux 容器解决方案. Docker 将应用程序与该程序的依赖,打包在一个文件里面 ...
- HTML节点操作
HTML节点操作 HTML节点的基本操作,添加节点,替换节点,删除节点,绑定事件,访问子节点,访问父节点,访问兄弟节点. 文档对象模型Document Object Model,简称DOM,是W3C组 ...
- Selenium系列(五) - 键盘操作详细解读
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- 教你如何利用threejs对3D模型皮肤进行DIY
一步一步教你如何利用threejs加载gltf模型来实现DIY换肤功能. 模型准备 模型制作 模型可以通过网上下载,也可以自己通过c4d.maya.blender等模型制作软件得到.这里就不叙述有关模 ...
- 【笔记3-31】Python语言基础-序列sequence
序列sequence 可变序列 列表 list 字典 不可变序列 字符串 str 元祖 tuple 通过索引修改列表 del 删除元素 del my_list[2] 切片赋值只能是序列 .insert ...
- 120prop-python3.7 读写.properties文件
120prop-python3.7 读写.properties文件 转载 nature_ph 最后发布于2019-07-30 10:12:05 阅读数 229 收藏 发布于2019-07-30 10: ...
- SpringMVC常见面试题总结(超详细回答)
SpringMVC常见面试题总结(超详细回答) 1.什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的 ...
- 【翻译】.NET 5 Preview2发布
在4月2日,发布了.NET 5.0 Preview2,这次发布对一些功能和性能做了相关的改进,同时后面也会实施5.0版本更多的功能,其中一些功能目前也dotnet/designs在.NET 5 Pre ...
- js 的位运算
api 用途 待更...
- Codeforces 杂题集 2.0
记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序 1326D2 - Prefix-Suffix Palindrome (Hard version) ...