fastapi

fastapi form data with pydantic model

微笑、不失礼 提交于 2020-05-31 20:45:24
问题 I am trying to submit data from html forms and on the validate it with pydantic model. Using this code from fastapi import FastAPI, Form from pydantic import BaseModel from starlette.responses import HTMLResponse app = FastAPI() @app.get("/form", response_class=HTMLResponse) def form_get(): return '''<form method="post"> <input type="text" name="no" value="1"/> <input type="text" name="nm" value="abcd"/> <input type="submit"/> </form>''' class SimpleModel(BaseModel): no: int nm: str = "" @app

fastapi form data with pydantic model

浪子不回头ぞ 提交于 2020-05-31 20:45:08
问题 I am trying to submit data from html forms and on the validate it with pydantic model. Using this code from fastapi import FastAPI, Form from pydantic import BaseModel from starlette.responses import HTMLResponse app = FastAPI() @app.get("/form", response_class=HTMLResponse) def form_get(): return '''<form method="post"> <input type="text" name="no" value="1"/> <input type="text" name="nm" value="abcd"/> <input type="submit"/> </form>''' class SimpleModel(BaseModel): no: int nm: str = "" @app

fastapi form data with pydantic model

▼魔方 西西 提交于 2020-05-31 20:44:14
问题 I am trying to submit data from html forms and on the validate it with pydantic model. Using this code from fastapi import FastAPI, Form from pydantic import BaseModel from starlette.responses import HTMLResponse app = FastAPI() @app.get("/form", response_class=HTMLResponse) def form_get(): return '''<form method="post"> <input type="text" name="no" value="1"/> <input type="text" name="nm" value="abcd"/> <input type="submit"/> </form>''' class SimpleModel(BaseModel): no: int nm: str = "" @app

PyInstaller and FastAPI (maximum recursion depth exceeded)

最后都变了- 提交于 2020-05-17 08:45:54
问题 I have a python service that uses fastapi as a web interface. I need to make an executable file and hence I am using PyInstaller . I keep getting the following error: File "..../miniconda3/lib/python3.7/site-packages/PyInstaller/lib/modulegraph/modulegraph.py", line 2912, in _load_package self._load_module(fqname, fp, buf, stuff) File "..../miniconda3/lib/python3.7/site-packages/PyInstaller/lib/modulegraph/modulegraph.py", line 2093, in _load_module m = self._load_package(fqname, pathname,

Python 异步编程再添一利器

扶醉桌前 提交于 2020-05-05 12:47:34
随着 Tornado 和 asyncio 等框架的陆续涌现,Python 异步编程这个话题也在逐渐升温。在这个烧脑的异步世界里,有没有办法可以既方便快捷、又简单明了地访问数据库呢?GitHub 千星项目 GINO 了解一下! 1. GINO 是谁 GINO 是一个“轻量级”异步 ORM 框架,它的全称是 GINO Is Not ORM,借鉴了 GNU is Not Unix 的递归定义手法。所以,GINO 一定要全!部!大!写!如果像这样“Gino”就变成了人名,你肯定要问一句“这是谁”。 ORM,即关系对象映射(Object-Relational Mapping),是一类开发人员喜闻乐见的效率工具,它们"极大地"提升了写代码的幸福指数。GINO 是用来访问数据库的,也提供了对象映射的工具,那为什么非说 GINO 不是 ORM 呢? 因为物极必反,ORM 在带来生活便利的同时,也是 bug 生长的温床 —— 传统 ORM 往往会选择牺牲明确性(explicitness)来换取便捷性(convenience),再加上 Python 得天独厚的灵活性(flexibility),创造出了一种爆炸式的化学反应。一旦代码初具规模,项目或多或少都会遇到 ORM 反噬的情景:性能莫名其妙的差、出问题找不到原因、为了鸡毛蒜皮的小事大动干戈。随便一句 current_user.name

性能是Flask的3倍!比PHP7还快!这个Python框架你值得拥有!

可紊 提交于 2020-05-05 10:45:09
天下武功,唯快不破。在软件开发中更是如此,“快”能从多方面提升用户体验。谈到Python,它似乎天生就和速度无关,你可能很熟悉Django、Flask这些框架,虽然开发效率的确不错,但是速度就一言难尽。那么在前后端分离开发的时代,有没有能拿得出手的Python Web框架呢?当然是有的,FastApi它来了。 一、为什么是FastApi? 人们在介绍FastApi的时候通常会说“FastApi”是一个高性能的异步WEB框架。我相信没有哪个程序员会跟“高性能”过不去,这往往也是我们所追求的东西。fastapi具有并发性能强、能够快速上手、容错能力强、自动生成交互式文档的特点,这些都是我们选择它的理由。 二、到底有多快? 很多人介绍FastApi框架时,经常说其并发性能能够和NodeJS以及Go媲美,其实言过其实。在Go语言中文社区中梦想做小猿分别对Go、Flask、FastApi做了性能测试,迫于篇幅限制,我这里直接放结果: FastAPI:500并发 30秒:Speed=955466 pages/min, 238685 bytes/sec Flask:500并发 30秒:Speed=33706 pages/min, 96457 bytes/sec Go:500并发 30秒:Speed=116962 pages/min, 278740 bytes/sec 可见Go还是很强大的

Python协程&asyncio&异步编程

喜夏-厌秋 提交于 2020-05-04 18:05:32
Python协程&asyncio&异步编程 1.协程 协程是微线程,是一种用户态上下文切换技术,通过一个线程实现代码块相互切换执行 实现协程有这么几种方法: greenlet,早期的模块 yield 关键字 asyncio python3.4引入的 async、await关键字 python3.5 主流[推荐] 1.1 greenlet实现协程 pip install greenlet # -*- coding: utf-8 -*- from greenlet import greenlet def func1(): print(1) # 第1步:输出1 gr2.switch() # 第2步:跳到func2函数 print(2) # 第5步:输出2 gr2.switch() # 第6步:跳到func2函数 def func2(): print(3) # 第3步:输出3 gr1.switch() # 第4步:跳到func1函数 print(4) # 第7步:输出4 gr1 = greenlet(func1) gr2 = greenlet(func2) gr1.switch() # 第1步:去执行func1函数 1.2 yield关键字 # -*- coding: utf-8 -*- def func1(): yield 1 yield from func2() yield 2 def

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

久未见 提交于 2020-04-27 16:33:26
安装 pip install fastapi[all] pip install unicorn 基本使用(不能同时支持,get, post方法等要分开写) 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来做模版渲染(flask也是使用jinja2, 如果用过flask, 默认是装过jinja2) # 安装 pip install jinja2 # 基本使用 from starlette.requests import Request from fastapi import FastAPI from starlette.templating import Jinja2Templates app = FastAPI() # 挂载模版文件夹 tmp = Jinja2Templates(directory=

python教程:使用 async 和 await 协程进行并发编程

江枫思渺然 提交于 2020-04-21 13:08:11
python 一直在进行并发编程的优化, 比较熟知的是使用 thread 模块多线程和 multiprocessing 多进程,后来慢慢引入基于 yield 关键字的协程。 而近几个版本,python 对于协程的写法进行了大幅的优化,很多之前的协程写法不被官方推荐了。如果你之前了解过 python 协程,你应该看看最新的用法。 并发、并行、同步和异步 并发指的是 一个 CPU 同时处理多个程序,但是在同一时间点只会处理其中一个。并发的核心是:程序切换。 但是因为程序切换的速度非常快,1 秒钟内可以完全很多次程序切换,肉眼无法感知。 并行指的是多个 CPU 同时处理多个程序,同一时间点可以处理多个。 同步:执行 IO 操作时,必须等待执行完成才得到返回结果。 异步:执行 IO 操作时,不必等待执行就能得到返回结果。 协程,线程和进程的区别 多进程通常利用的是多核 CPU 的优势,同时执行多个计算任务。每个进程有自己独立的内存管理,所以不同进程之间要进行数据通信比较麻烦。 多线程是在一个 cpu 上创建多个子任务,当某一个子任务休息的时候其他任务接着执行。多线程的控制是由 python 自己控制的。 子线程之间的内存是共享的,并不需要额外的数据通信机制。但是线程存在数据同步问题,所以要有锁机制。 协程的实现是在一个线程内实现的,相当于流水线作业。由于线程切换的消耗比较大

(完结篇)Python框架之FastAPI——一个比Flask和Tornado更高性能的API 框架

我与影子孤独终老i 提交于 2020-04-17 09:10:24
【推荐阅读】微服务还能火多久?>>> 0 前言 前几天给大家分别分享了 (入门篇)简析Python web框架FastAPI——一个比Flask和Tornada更高性能的API 框架 和 (进阶篇)Python web框架FastAPI——一个比Flask和Tornada更高性能的API 框架 。今天欢迎大家来到 FastAPI 系列分享的完结篇,本文主要是对于前面文章的补充和扩展。 当然这些功能在实际开发中也扮演者极其重要的角色。 1 中间件的使用 Flask 有 钩子函数,可以对某些方法进行装饰,在某些全局或者非全局的情况下,增添特定的功能。 同样在 FastAPI 中也存在着像钩子函数的东西,也就是中间件 Middleware了。 计算回调时间 # -*- coding: UTF-8 -*- import time from fastapi import FastAPI from starlette.requests import Request app = FastAPI() @app.middleware("http") async def add_process_time_header(request: Request, call_next): start_time = time.time() response = await call_next(request)