python
文章平均质量分 85
vanexph
这个作者很懒,什么都没留下…
展开
-
FastAPI 请求上下文及应用上下文
在fastapi的实际应用中发现,fastapi没有提供像flask中的g这样的上下文相关的东西。所以在查找了多方的资料发现,可以使用中间件,再加上Python3.7中的新特性contextvar可以实现应用上下文的管理。contextvar可自行到官网进行学习。这里着重讲解一下fastapi中怎么应用。fastapi中的中间件,可实现对每次请求的request对象进行操作,然后执行请求内容,最后也可以对返回response进行处理。middleware用法参考我之前的文章。fastapi基于sta原创 2020-05-25 19:04:14 · 4059 阅读 · 2 评论 -
python 特殊方法
字符串、字节序列表示形式 : __repr__,__str__,__format__,__bytes__数值转换:__abs__,__bool__,__complex__,__int__,__float__,__hash__,__index__集合模拟:__len__,__getitem__,__setitem__,__delitem__,__contains__迭代枚举:__iter__,__reversed__,__next__可调用模拟:__call__上下文管理:__ent原创 2020-05-21 16:52:02 · 202 阅读 · 0 评论 -
Python 装饰器应用
一、创建装饰器时保留函数元信息当装饰器作用在某个函数上时,这个函数的重要元信息:名字,文档,注解和参数签名都会丢失。可以使用functools库中的@wraps装饰器来注解底层包装函数。eg:import timefrom functools import wrapsdef timethis(func): @wraps(func) def wrapper(*args,**kwargs): start=time.time() result=func(*args,**kwargs)原创 2020-05-20 16:24:11 · 222 阅读 · 0 评论 -
fastapi(二十三)-高级用户指南
路径操作高级配置OpenAPI的operationId您可以使用operationId参数设置在路径操作中使用的OpenAPI operation_id。from fastapi import FastAPIapp = FastAPI()@app.get("/items/", operation_id="some_specific_id_you_define")async def...翻译 2020-03-24 13:40:01 · 2731 阅读 · 0 评论 -
fastapi(二十二)-应用配置
您可以在FastAPI应用程序中配置几件事。标题,描述和版本您可以设置:标题:在OpenAPI和自动API文档用户界面中,用作API的标题/名称。Description:OpenAPI和自动API文档UI中对API的描述。版本:API的版本,例如v2或2.5.0。例如,如果您具有应用程序的先前版本(也使用OpenAPI),则很有用。from fastapi import F...翻译 2020-03-24 11:42:13 · 2254 阅读 · 0 评论 -
fastapi(二十一)-后台任务
可以在返回response后运行后台任务。这对于在请求之后需要进行的操作很有用,但是客户端实际上并不需要在收到响应之前就等待操作完成。例如,这包括:执行操作后发送的电子邮件通知:由于连接到电子邮件服务器并发送电子邮件的过程通常很慢(几秒钟),因此您可以立即返回响应并在后台发送电子邮件通知。处理数据:例如,假设您收到的文件必须经过缓慢的处理,您可以返回“已接受”(HTTP 20...翻译 2020-03-24 11:38:49 · 6342 阅读 · 0 评论 -
fastapi(二十)-大型项目文件结构
如果需要构建应用程序或api,很少将所有的内容都放入一个文件中。fastapi提供了一个方便的工具可灵活的构建应用。(类似于flask的蓝图)假如文件结构如下:.├── app│ ├── init.py│ ├── main.py│ └── routers│ ├── init.py│ ├── items.py│ └── users....翻译 2020-03-24 11:29:16 · 10786 阅读 · 1 评论 -
fastapi(十九)-中间件
你可以添加中间件到你的fastapi应用程序中“中间件”是一种函数,该函数可在每个请求由任何特定路径操作处理之前与每个请求一起使用。以及返回之前的每个响应。它从你的应用程序中接收每个请求然后,它可以对该请求执行某些操作或运行任何所需的代码。然后,它传递要由应用程序其余部分处理的请求(通过某些路径操作)。然后,它将获取应用程序生成的响应(通过某些路径操作)它可以对响应做出响应或运行任何...翻译 2020-03-24 11:03:21 · 3724 阅读 · 0 评论 -
fastapi(十八)-jwt token
为了让我们的系统更加的安全,我们需要使用jwt token和真正的password hashing关于JWTjwt意思是“json web token”看起来是这个样子的:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyf...翻译 2020-03-24 10:31:53 · 4123 阅读 · 0 评论 -
fastapi(十七)-安全
安全介绍有许多方式去处理安全性,身份认证和授权。并且它通常是一个复杂而又困难的话题。fastapi提供一些工具去更容易的处理安全问题。先来了解一些小的概念1、OAuth2OAuth2是一个规范,定义了几种处理身份验证和授权的方式。它是一个相当广泛的规范,涵盖了几个复杂的用例。它包括使用“第三方”进行身份验证的方法。这就是所有带有“使用Facebook,Google,Twitter...翻译 2020-03-23 16:41:01 · 4089 阅读 · 0 评论 -
fastapi(十六)-依赖关系
fastapi是一个非常强大而又直观的依赖注入系统它被设计得使用起来非常简单,同时让开发人员可以轻松得将其他组件与fastapi集成在一起。什么时依赖注入依赖注入意味着在编码得时候,在你得代码中会留一条通道给你去声明需要用到依赖,(即:要想你得代码成功运行必须得先成功运行依赖函数。有点类似于装饰器)在你做以下操作得时候将会非常有用:使用共享逻辑(一遍又一遍得使用相同得代码)共享数据连...翻译 2020-03-23 11:19:40 · 2949 阅读 · 0 评论 -
fastapi(十五)-Body update
使用PUT更新替换HTTP PUT操作可用于更新,你可以使用jsonable_encoder来转换输入的数据为可以使用json存储的数据。(eg:NoSQL Database)from typing import Listfrom fastapi import FastAPIfrom fastapi.encoders import jsonable_encoderfrom pyda...翻译 2020-03-22 16:51:08 · 546 阅读 · 0 评论 -
fastapi(十四)-路径操作配置-json兼容编码
在路径操作装饰器上可以传入几个参数。响应状态码在路径操作中可以定义status_code用于响应中,你可以直接传入整数code,如果不记得每个数字代表什么,可以在状态中加入简短得描述。eg:from typing import Setfrom fastapi import FastAPI, statusfrom pydantic import BaseModelapp = Fa...翻译 2020-03-22 16:32:11 · 2006 阅读 · 2 评论 -
fastapi(十三)-错误处理
在许多情况下你的api都需要向用户告知错误信息,like:1、客户端没有操作权限2、不能访问资源3、资源不存在等当向客户端响应错误信息的时候可以使用HTTPExceptionHTTPExceptioneg:from fastapi import FastAPI, HTTPExceptionapp = FastAPI()items = {"foo": "The Foo Wre...翻译 2020-03-20 11:50:31 · 6506 阅读 · 0 评论 -
fastapi(十二)-表单数据和文件上传
当你需要接收表单字段而不是json时可以使用Form为了使用form需要先安装python-multipartpip install python-ultiparteg:from fastapi import FastAPI, Formapp = FastAPI()@app.post("/login/")async def login(*, username: str = Fo...翻译 2020-03-20 10:40:14 · 6892 阅读 · 2 评论 -
fastapi(十一)-响应状态码
同样你也可以在以下路径操作中使用status_code参数来声明Http的status code@app.get()@app.post()@app.put()@app.delete()eg:from fastapi import FastAPIapp = FastAPI()@app.post("/items/", status_code=201)async def cr...翻译 2020-03-20 09:56:40 · 904 阅读 · 0 评论 -
fastapi(十)-响应模式
你可以在一下方法中设置相应的response_model参数:@app.get()@app.post()@app.put()@app.delete()eg: from typing import Listfrom fastapi import FastAPIfrom pydantic import BaseModelapp = FastAPI()class Item...翻译 2020-03-20 09:39:28 · 1671 阅读 · 0 评论 -
fastapi(九)-头部参数
头部参数和Query,Path和Cookie一样。eg:from fastapi import FastAPI, Headerapp = FastAPI()@app.get("/items/")async def read_items(*, user_agent: str = Header(None)): return {"User-Agent": user_agent}...翻译 2020-03-19 17:31:29 · 1887 阅读 · 0 评论 -
fastapi(八)额外的数据类型-Cookie
到目前为止,常见的数据类型有:intfloatstrbool但是你也可以使用更复杂的数据类型其他数据类型UUID:一个标准的“universally unique identifier” ,可以在很多的数据库和系统中作为id值datetime.datetimepython中的datetime.datetime。在请求和返回中将会作为str使用ISO 8601格式: 2008-...翻译 2020-03-19 17:21:26 · 660 阅读 · 0 评论 -
fastapi(七)Body
我们已经提到过Path以及Query,下面来看看更好的对于请求正文的声明body-多个参数混合Path,Query和请求正文参数eg:from fastapi import FastAPI, Pathfrom pydantic import BaseModelapp = FastAPI()class Item(BaseModel): name: str desc...翻译 2020-03-19 16:43:40 · 2498 阅读 · 0 评论 -
fastapi(六)路径参数和数值验证
你可以像在Query中定义的数据验证和metadata一样,在Path中使用。eg:from fastapi import FastAPI, Path, Queryapp = FastAPI()@app.get("/items/{item_id}")async def read_items( item_id: int = Path(..., title="The ID of...翻译 2020-03-19 15:07:47 · 1024 阅读 · 0 评论 -
fastapi(五)查询参数字符串认证
fastapi 允许为你的参数添加附加的信息和验证eg:from fastapi import FastAPIapp = FastAPI()@app.get("/items/")async def read_items(q: str = None): results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}...翻译 2020-03-19 14:37:39 · 961 阅读 · 0 评论 -
fastapi(四)请求正文
当你需要从client发送数据到你的api的时候,需要将其作为请求正文发送。request是客户端发送数据到api,response是api发送数据到客户端。你的api总是需要发送response body 但是客户端并不是必须发送request body为了声明请求正文,可以使用pydantic 模块注意:发送请求正文,不能使用GET方法,只能使用POST、PUT、DELETE或者PA...翻译 2020-03-19 14:02:43 · 1966 阅读 · 0 评论 -
fastapi(三)查询参数
当你声明函数参数的时候,如果参数并不是来自路径参数中,那么将被自动视为查询参数。from fastapi import FastAPIapp = FastAPI()fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]@app.get("/items/")async de...翻译 2020-03-19 11:24:39 · 1992 阅读 · 0 评论 -
fastapi(二)路径参数
路径参数你可以声明一个路径参数或者变量,使用python格式的字符串。@app.get("/items/{item_id}")async def read_item(item_id):...这个路径参数item_id的值将会传入函数中的变量item_id 中使用类型的路径参数你可以在函数中声明路径参数的类型,使用python类型注释。...async def read_item...翻译 2020-03-19 11:08:54 · 1720 阅读 · 0 评论 -
Fastapi(一)
用户指南这个用户指南将指导你怎样去使用fastapi,运行代码所有的代码都能够直接复制并运行,为了运行这些实例,直接拷贝代码到main.py文件中,然后使用uvicorn运行:uvicorn main:app -reload安装fastapi安装fastapi第一步你也许想要安装它的所有依赖项目:pip install fastapi[all]它也会安装uvicorn,注意:...翻译 2020-03-19 10:31:50 · 3249 阅读 · 1 评论 -
mysql数据库自动填充数据,性能测试
import stringimport argparseimport randomimport threadingimport timefrom contextlib import contextmanagerimport pymysqlDB_NAME=‘test_insert_data_db’TABLE_NAME=‘test_insert_data_table’CREATE_T...原创 2019-08-06 17:25:01 · 674 阅读 · 0 评论 -
判断IP是否可达,threading,queue,subprocess
#encoding:utf-8import subprocessimport threadingfrom queue import Queuefrom queue import Emptydef call_ping(ip):if subprocess.call([“ping”,’-c’,‘1’,ip]):print("{0} is alive".format(ip))else:p...原创 2019-08-06 10:57:36 · 164 阅读 · 0 评论 -
python 遍历文件系统,查找符合条件的文件,带过滤功能
#encoding:utf-8import osimport fnmatchclass find_file():def is_file_match(self,filename,patterns):for pattern in patterns:if fnmatch.fnmatch(filename,pattern):return Truereturn Falsedef find_...原创 2019-08-05 16:40:57 · 949 阅读 · 0 评论