FastAPI框架

该框架的速度(天然支持异步)比一般的django和flask要快N多倍,号称可以比肩Go

使用该框架需要保证你的python解释器版本是3.6及以上

Ps:django3.X版本也支持异步,但是它的异步功能并没有真正的实现,还有很多bug

安装

  1. pip3 install fastapi
  2. pip3 install unicorn

基本使用

  1. from fastapi import FastAPI
  2. app = FastAPI()
  3. @app.get('/') # 点get就支持get请求
  4. def read_root():
  5. return {"hello":'world'}
  6. if __name__ == '__main__':
  7. import uvicorn
  8. uvicorn.run(app,host='127.0.0.1',port=8080)

模版渲染

fastapi本身是没有模版渲染功能的,需要你借助于第三方的模版工具

该框架默认情况下也是借助于jinja2来做模版渲染

安装jinja2

  1. pip3 install jinja2

基本使用

  1. from starlette.requests import Request
  2. from fastapi import FastAPI
  3. from starlette.templating import Jinja2Templates
  4. app = FastAPI()
  5. # 挂在模版文件夹
  6. tmp = Jinja2Templates(directory='templates')
  7. @app.get('/')
  8. async def get_tmp(request:Request): # async加了就支持异步
  9. return tmp.TemplateResponse('index.html',
  10. {'request':request, # 一定要返回request
  11. 'args':'hello world' # 额外的参数可有可无
  12. }
  13. )
  14. @app.get('/{item_id}/') # url后缀
  15. async def get_item(request:Request,item_id):
  16. return tmp.TemplateResponse('index.html',
  17. {'request':request,
  18. 'kw':item_id
  19. })
  20. if __name__ == '__main__':
  21. import uvicorn
  22. uvicorn.run(app,host='127.0.0.1',port=8080)

form表单数据交互

基本数据

  1. from starlette.requests import Request
  2. from fastapi import FastAPI,Form
  3. from starlette.templating import Jinja2Templates
  4. app = FastAPI()
  5. tmp = Jinja2Templates(directory='templates')
  6. @app.get('/') # 接受get请求
  7. async def get_user(request:Request):
  8. return tmp.TemplateResponse('form.html',{'request':request})
  9. @app.post('/user/') # 接受post请求
  10. async def get_user(request:Request,
  11. username:str=Form(...), # 直接去请求体里面获取username键对应的值并自动转化成字符串类型
  12. pwd:int=Form(...) # 直接去请求体里面获取pwd键对应的值并自动转化成整型
  13. ):
  14. print(username,type(username))
  15. print(pwd,type(pwd))
  16. return tmp.TemplateResponse('form.html',{
  17. 'request':request,
  18. 'username':username,
  19. 'pwd':pwd
  20. })
  21. if __name__ == '__main__':
  22. import uvicorn
  23. uvicorn.run(app,host='127.0.0.1',port=8080)

文件交互

  1. from starlette.requests import Request
  2. from fastapi import FastAPI, Form, File, UploadFile
  3. from starlette.templating import Jinja2Templates
  4. from typing import List
  5. app = FastAPI()
  6. tmp = Jinja2Templates(directory='templates')
  7. @app.get('/') # 接受get请求
  8. async def get_file(request: Request):
  9. return tmp.TemplateResponse('file.html', {'request': request})
  10. # 单个文件
  11. @app.post('/file/') # 接受post请求
  12. async def get_user(request: Request,
  13. file: bytes = File(...),
  14. file_obj: UploadFile = File(...),
  15. info: str = Form(...)
  16. ):
  17. return tmp.TemplateResponse('index.html', {
  18. 'request': request,
  19. 'file_size': len(file),
  20. 'file_name': file_obj.filename,
  21. 'info':info,
  22. 'file_content_type':file_obj.content_type
  23. })
  24. # 多个文件
  25. @app.post('/files/')
  26. async def get_files(request:Request,
  27. files_list:List[bytes] = File(...), # [文件1的二进制数据,文件2的二进制数据]
  28. files_obj_list:List[UploadFile]=File(...) # [file_obj1,file_obj2,....]
  29. ):
  30. return tmp.TemplateResponse('index.html',
  31. {'request':request,
  32. 'file_sizes':[len(file) for file in files_list],
  33. 'file_names':[file_obj.filename for file_obj in files_obj_list]
  34. }
  35. )
  36. if __name__ == '__main__':
  37. import uvicorn
  38. uvicorn.run(app, host='127.0.0.1', port=8080)

静态文件配置

  1. from starlette.staticfiles import StaticFiles
  2. # 挂载静态文件夹
  3. app.mount('/static',StaticFiles(directory='static'),name='static')
  4. # 前端
  5. <link rel="stylesheet" href="{{ url_for('static',path='/css/111.css') }}">
  6. <script src="{{ url_for('static',path='/js/111.js') }}"></script>

FastAPI框架的更多相关文章

  1. 利用本地HTTPS模拟环境为FastAPI框架集成FaceBook社交三方登录

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_174 提起社交,就不得不说马克·扎克伯格(Mark Zuckerberg)一手创办的社交网络(FaceBook).进入2020年, ...

  2. FastAPI框架入门 基本使用, 模版渲染, form表单数据交互, 上传文件, 静态文件配置

    安装 pip install fastapi[all] pip install unicorn 基本使用(不能同时支持,get, post方法等要分开写) from fastapi import Fa ...

  3. 三分钟了解 Python3 的异步 Web 框架 FastAPI

    快速编码,功能完善.从启动到部署,实例详解异步 py3 框架选择 FastAPI 的原因. FastAPI 介绍 FastAPI 与其它 Python-Web 框架的区别 在 FastAPI 之前,P ...

  4. 什么是FastAPI异步框架?(全面了解)

    一:FastAPI框架 1.FastAPI是应该用于构建API的现代,快速(高性能)的 web 框架,使用Python 3.6+ 并基于标准的 Python 类型提示. 关键性: 快速: 可与Node ...

  5. FastApi持续更新

    ​ FastAPI 框架,高性能,易于学习,高效编码,生产可用 官方文档: https://fastapi.tiangolo.com FastAPI 是一个用于构建 API 的现代.快速(高性能)的 ...

  6. day02 web主流框架

    day02 web主流框架 今日内容概要 手写简易版本web框架 借助于wsgiref模块 动静态网页 jinja2模板语法 前端.web框架.数据库三种结合 Python主流web框架 django ...

  7. asyncio异步编程【含视频教程】

    不知道你是否发现,身边聊异步的人越来越多了,比如:FastAPI.Tornado.Sanic.Django 3.aiohttp等. 听说异步如何如何牛逼?性能如何吊炸天....但他到底是咋回事呢? 本 ...

  8. 如何利用 Python 爬虫实现给微信群发新闻早报?(详细)

    1. 场景 经常有小伙伴在交流群问我,每天的早报新闻是怎么获取的? 其实,早期使用的方案,是利用爬虫获取到一些新闻网站的标题,然后做了一些简单的数据清洗,最后利用 itchat 发送到指定的社群中. ...

  9. 线下---复习day01

    目录 1 个人介绍 2 关于编辑器 3 基础串讲 3.1 解释型和编译型 3.2 数据类型 3.2.1 一切皆对象 3.2.1 深浅copy 3.2.3 可变类型与不可变类型 3.3 字符编码 3.4 ...

随机推荐

  1. iOS/macOS推荐个高效苹果开发工具, JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,支持Swift/Objective-C,极速转换

    CCJSON 是一款运行在macOS上 JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,可识别嵌套模型,字典/数组,支持Swift/Objective-C,操作方便,极速转换.下载 效果 ...

  2. 【分布式锁】07-Zookeeper实现分布式锁:Semaphore、读写锁实现原理

    前言 前面已经讲解了Zookeeper可重入锁的实现原理,自己对分布式锁也有了更深的认知. 我在公众号中发了一个疑问,相比于Redis来说,Zookeeper的实现方式要更好一些,即便Redis作者实 ...

  3. 说说自己为什么用Mac不用Win系统?

    原本Mac和Win系统各有优劣,但偏偏最近有人误导身边的朋友说"学编程肯定是Windows系统呀,Mac不行的",又不给出有说服力的理由,于是我心有愤懑,正好趁机总结一下自己对于两 ...

  4. pd库dataframe基本操作

    一.查看数据(查看对象的方法对于Series来说同样适用) 1.查看DataFrame前xx行或后xx行 a=DataFrame(data); a.head(6)表示显示前6行数据,若head()中不 ...

  5. 3分钟了解GPT Bert与XLNet的差异

    译者 | Arno 来源 | Medium XLNet是一种新的预训练模型,在20项任务中表现优于BERT,且有大幅度的提升. 这是什么原因呢? 在不了解机器学习的情况下,不难估计我们捕获的上下文越多 ...

  6. 超越Mask-RCNN:谷歌大脑的AI,自己写了个目标检测AI

    这是一只AI生出的小AI. 谷歌大脑的Quoc Le团队,用神经网络架构搜索 (NAS) ,发现了一个目标检测模型.长这样: △ 看不清请把手机横过来 它的准确率和速度都超过了大前辈Mask-RCNN ...

  7. 性能计数器在.NET Core中的新玩法

    传统的.NET Framework提供的System.Diagnostics.PerformanceCounter类型可以帮助我们收集Windows操作系统下物理机或者进程的性能指标,基于Perfor ...

  8. [vijos1460&Metocode P223]拉力赛<LCA>

    题目链接:https://vijos.org/p/1460 http://oj.fjaxyz.com:3389/problem.php?id=223 我不禁开始怀疑,这,真的是最近公共祖先的题吗,我是 ...

  9. K-Folds cross-validator-K折交叉验证实现

    源码: import numpy as np from sklearn.model_selection import KFold X = np.array([[, ], [, ], [, ], [, ...

  10. 1068 Find More Coins (30分)(dp)

    Eva loves to collect coins from all over the universe, including some other planets like Mars. One d ...