标签归档:framework

Graphene-Python的GraphQL框架

引言

Graphene是一个固执己见的Python库,用于快速轻松地构建GraphQL架构/类型

  • 易于使用:石墨烯可帮助您轻松使用Python中的GraphQL
  • 继电器:石墨烯具有对中继的内置支持
  • 数据不可知:石墨烯支持任何类型的数据源:SQL(Django、SQLAlChemy)、NoSQL、自定义Python对象等。我们相信,通过提供完整的API,您可以将Graphene插入数据所在的任何位置,并通过GraphQL使您的数据可用

集成

石墨烯与不同的框架有多种集成:

集成 套餐
姜戈 graphene-django
SQL炼金术 graphene-sqlalchemy
Google App Engine graphene-gae

此外,Graphene完全兼容GraphQL规范,可以与所有GraphQL客户端无缝协作,例如RelayApollogql

安装

要安装石墨烯,只需在shell中运行此命令

pip install "graphene>=2.0"

示例

以下是您可以开始使用的一个示例:

import graphene

class Query(graphene.ObjectType):
    hello = graphene.String(description='A typical hello world')

    def resolve_hello(self, info):
        return 'World'

schema = graphene.Schema(query=Query)

然后查询graphene.Schema简单到如下所示:

query = '''
    query SayHello {
      hello
    }
'''
result = schema.execute(query)

如果您想了解更多,您还可以检查以下内容examples

文档

有关其他资源的文档和链接,请访问https://docs.graphene-python.org/en/latest/

贡献

克隆此存储库后,请创建virtualenv并通过运行以下命令确保安装了依赖项:

virtualenv venv
source venv/bin/activate
pip install -e ".[test]"

编写良好的测试并保持良好的测试覆盖率对此项目非常重要。在开发过程中,使用以下各项运行新的和现有的测试:

py.test graphene/relay/tests/test_node.py # Single file
py.test graphene/relay # All tests in directory

添加-s标记是否已将断点引入代码以进行调试。添加-v(“详细”)标志,以获取更详细的测试输出。要获得更详细的输出,请使用-vv请查看pytest documentation有关更多选项和测试运行控件的信息

您还可以使用以下命令运行基准测试:

py.test graphene --benchmark-only

石墨烯支持多个版本的Python。为了确保更改不会破坏与任何这些版本的兼容性,我们使用tox为每个Python版本创建Virtualenv并使用该版本运行测试。中定义的所有Python版本运行tox.ini配置文件,只需运行:

tox

中定义的特定版本运行tox.ini文件:

tox -e py36

TOX只能使用系统上安装的任何版本的Python。当您创建Pull请求时,Travis还将运行相同的测试并报告结果,因此潜在贡献者没有必要尝试提前在自己的系统上安装每个版本的Python。我们感谢公开的问题和拉请求,以使石墨烯更稳定和有用!

建筑文档

文档是使用优秀的Sphinx和自定义主题

该文档的HTML版本是通过运行以下命令生成的:

make docs

Nameko-用于构建微服务的Python框架

Python的微服务框架,让服务开发人员专注于应用程序逻辑并鼓励可测试性

Nameko服务只是一个类:

# helloworld.py

from nameko.rpc import rpc

class GreetingService:
    name = "greeting_service"

    @rpc
    def hello(self, name):
        return "Hello, {}!".format(name)

您可以在shell中运行它:

$ nameko run helloworld
starting services: greeting_service
...

从另一个人那里玩弄它:

$ nameko shell
>>> n.rpc.greeting_service.hello(name="ナメコ")
'Hello, ナメコ!'

功能

  • AMQP RPC和事件(发布-订阅)
  • HTTP GET、POST和WebSockets
  • CLI可实现轻松快速的开发
  • 用于单元和集成测试的实用程序

快速入门

支持

如需帮助、意见或问题,请访问<https://discourse.nameko.io/>

对于企业而言

作为Tidelift订阅的一部分提供

nameko和其他数千个包的维护者正在与Tidelift合作,为您用于构建应用程序的开源依赖项提供商业支持和维护。节省时间、降低风险并提高代码的健全性,同时付钱给您使用的确切依赖项的维护人员。Learn more.

安全联系信息

若要报告安全漏洞,请使用Tidelift security contactTidelift将协调修复和披露

贡献力量

  • 派生存储库
  • 提出问题或提出功能请求

许可证

Apache 2.0。有关详细信息,请参阅许可证

Jina-面向任何类别数据的云原生神经搜索框架

云-本地神经搜索[?]适用于以下方面的框架任何数据类型

Jina 允许您在短短几分钟内构建以深度学习为动力的搜索即服务

🌌所有数据类型-大规模索引和查询任何类型的非结构化数据:视频、图像、长/短文本、音乐、源代码、PDF等

🌩️FAST和本机云-从第一天开始的分布式架构,可扩展且设计为本地云:享受集装箱化、流式处理、并行、分片、异步调度、HTTP/GRPC/WebSocket协议

⏱️节省时间这个神经搜索系统的设计模式,从零到生产准备就绪的系统只需几分钟

🍱拥有您的堆栈-保持解决方案的端到端堆栈所有权,避免使用零散的、多供应商的通用旧式工具带来的集成陷阱

运行快速演示

安装

  • 通过PyPI:pip install -U "jina[standard]"
  • 通过Docker:docker run jinaai/jina:latest
更多安装选项
x86/64、arm64、v6、v7 Linux/MacOS和Python 3.7/3.8/3.9 Docker用户
最低要求
(不支持HTTP、WebSocket、Docker)
pip install jina docker run jinaai/jina:latest
Daemon pip install "jina[daemon]" docker run --network=host jinaai/jina:latest-daemon
使用附加服务 pip install "jina[devel]" docker run jinaai/jina:latest-devel

版本标识符are explained here吉娜可以继续奔跑Windows Subsystem for Linux我们欢迎社会各界帮助我们native Windows support

开始使用

文档、执行者和流是JINA中的三个基本概念

1个️⃣复制-粘贴下面的最小示例并运行它:

💡预赛:character embeddingpoolingEuclidean distance

import numpy as np
from jina import Document, DocumentArray, Executor, Flow, requests

class CharEmbed(Executor):  # a simple character embedding with mean-pooling
    offset = 32  # letter `a`
    dim = 127 - offset + 1  # last pos reserved for `UNK`
    char_embd = np.eye(dim) * 1  # one-hot embedding for all chars

    @requests
    def foo(self, docs: DocumentArray, **kwargs):
        for d in docs:
            r_emb = [ord(c) - self.offset if self.offset <= ord(c) <= 127 else (self.dim - 1) for c in d.text]
            d.embedding = self.char_embd[r_emb, :].mean(axis=0)  # average pooling

class Indexer(Executor):
    _docs = DocumentArray()  # for storing all documents in memory

    @requests(on='/index')
    def foo(self, docs: DocumentArray, **kwargs):
        self._docs.extend(docs)  # extend stored `docs`

    @requests(on='/search')
    def bar(self, docs: DocumentArray, **kwargs):
        q = np.stack(docs.get_attributes('embedding'))  # get all embeddings from query docs
        d = np.stack(self._docs.get_attributes('embedding'))  # get all embeddings from stored docs
        euclidean_dist = np.linalg.norm(q[:, None, :] - d[None, :, :], axis=-1)  # pairwise euclidean distance
        for dist, query in zip(euclidean_dist, docs):  # add & sort match
            query.matches = [Document(self._docs[int(idx)], copy=True, scores={'euclid': d}) for idx, d in enumerate(dist)]
            query.matches.sort(key=lambda m: m.scores['euclid'].value)  # sort matches by their values

f = Flow(port_expose=12345, protocol='http', cors=True).add(uses=CharEmbed, parallel=2).add(uses=Indexer)  # build a Flow, with 2 parallel CharEmbed, tho unnecessary
with f:
    f.post('/index', (Document(text=t.strip()) for t in open(__file__) if t.strip()))  # index all lines of _this_ file
    f.block()  # block for listening request

2个️⃣打开http://localhost:12345/docs(扩展的Swagger UI)在浏览器中,单击/搜索制表符和输入:

{"data": [{"text": "@requests(on=something)"}]}

也就是说,我们希望从上面的代码片段中找到与以下内容最相似的行@request(on=something)现在单击执行巴顿!

3个️⃣不是图形用户界面的人?那就让我们用Python来做吧!保持上述服务器运行,并启动一个简单的客户端:

from jina import Client, Document
from jina.types.request import Response


def print_matches(resp: Response):  # the callback function invoked when task is done
    for idx, d in enumerate(resp.docs[0].matches[:3]):  # print top-3 matches
        print(f'[{idx}]{d.scores["euclid"].value:2f}: "{d.text}"')


c = Client(protocol='http', port_expose=12345)  # connect to localhost:12345
c.post('/search', Document(text='request(on=something)'), on_done=print_matches)

,它打印以下结果:

         Client@1608[S]:connected to the gateway at localhost:12345!
[0]0.168526: "@requests(on='/index')"
[1]0.181676: "@requests(on='/search')"
[2]0.192049: "query.matches = [Document(self._docs[int(idx)], copy=True, score=d) for idx, d in enumerate(dist)]"

😔不管用吗?我们的错!Please report it here.

阅读教程

支持

加入我们吧

吉娜的后盾是Jina AIWe are actively hiring全栈开发人员、解决方案工程师在开源领域构建下一个神经搜索生态系统

贡献

我们欢迎来自开源社区、个人和合作伙伴的各种贡献。我们的成功归功于你的积极参与



















Sanic-异步Python 3.7+Web服务器/框架|快速构建

SANIC|快速构建。跑得很快

构建
文档
套餐
支持
统计数据

Sanic是一家Python 3.7+Web服务器和Web框架,它们都是为快速运行而编写的。它允许使用async/awaitPython3.5中添加的语法可使您的代码实现非阻塞和快速

Sanic也符合ASGI,因此您可以使用alternative ASGI webserver

Source code on GitHub|Help and discussion board|User Guide|Chat on Discord

该项目由社区维护,为社区服务。欢迎投稿!

该项目的目标是提供一种简单的方法来设置和运行易于构建、易于扩展并最终可扩展的高性能HTTP服务器

赞助商

使用完整的源代码树上下文在IDE中管理拉请求和执行代码审查。评论任何一行,而不仅仅是不同之处。将跳转到定义、您最喜欢的键绑定和代码智能用于更多工作流

Learn More

感谢我们的赞助商。检查open collective了解有关帮助资助Sanic的更多信息

安装

pip3 install sanic

Sanic利用uvloopujson来帮助提高绩效。如果您不想使用这些软件包,只需添加一个环境变量SANIC_NO_UVLOOP=trueSANIC_NO_UJSON=true在安装时

$ export SANIC_NO_UVLOOP=true
$ export SANIC_NO_UJSON=true
$ pip3 install --no-binary :all: sanic

注意事项

如果您正在全新安装的Fedora 28或更高版本上运行,请确保您有redhat-rpm-config安装软件包,以防您要使用sanic使用ujson依赖性

注意事项

Windows支持目前是“试验性的”,并且是在尽最大努力的基础上。Windows当前也不支持多个工作进程(请参见Issue #1517),但设置workers=1应成功启动服务器

Hello World示例

from sanic import Sanic
from sanic.response import json

app = Sanic("My Hello, world app")

@app.route('/')
async def test(request):
    return json({'hello': 'world'})

if __name__ == '__main__':
    app.run()

SANIC现在可以使用以下工具轻松运行sanic hello.app

[2018-12-30 11:37:41 +0200] [13564] [INFO] Goin' Fast @ http://127.0.0.1:8000
[2018-12-30 11:37:41 +0200] [13564] [INFO] Starting worker [13564]

而且,我们可以验证它是否正常工作:curl localhost:8000 -i

HTTP/1.1 200 OK
Connection: keep-alive
Keep-Alive: 5
Content-Length: 17
Content-Type: application/json

{"hello":"world"}

现在,让我们快点造点东西吧!

最低Python版本为3.7。如果您需要Python 3.6支持,请使用v20.12LTS

文档

User GuideAPI Documentation

更改日志

Release Changelogs

问题和讨论

Ask a question or join the conversation

贡献

我们总是很高兴有新的贡献。我们有marked issues good for anyone looking to get started,欢迎您的到来questions on the forums请看一下我们的Contribution guidelines

Python-telegram-bot 电报机器人API

我们给你做了一个你不能拒绝的…

目录

引言

此库为以下对象提供纯Python接口Telegram Bot API它与Python版本3.6.8+兼容。PTB也可能在PyPy,尽管以前有很多问题。因此,PyPy不受官方支持

除了纯API实现之外,该库还提供了许多高级类,使bot的开发变得简单明了。这些类包含在telegram.ext子模块

纯API实现没有telegram.ext以独立软件包的形式提供python-telegram-bot-rawSee here for details.

注意事项

同时安装两者python-telegram-botpython-telegram-bot-raw联合使用会导致不良副作用,所以只需安装两者中的

电报API支持

所有类型和方法的Telegram Bot API5.3均受支持

正在安装

您可以使用以下命令安装或升级python-Telegram-bot:

$ pip install python-telegram-bot --upgrade

或者,您可以使用以下命令从源安装:

$ git clone https://github.com/python-telegram-bot/python-telegram-bot --recursive
$ cd python-telegram-bot
$ python setup.py install

如果您之前已经克隆了本地存储库,则应该在使用以下命令安装之前初始化添加的urllib3子模块:

$ git submodule update --init --recursive

可选依赖项

PTB可以与可选依赖项一起安装:

  • pip install python-telegram-bot[passport]安装cryptography图书馆。如果您要使用电报护照相关功能,请使用此功能
  • pip install python-telegram-bot[ujson]安装ujson图书馆。然后,它将被用于JSON去编码,与标准相比,这可以带来更快的速度json图书馆
  • pip install python-telegram-bot[socks]安装PySocks图书馆。如果要在Socks5服务器后面工作,请使用此选项

快速入门

我们的维基包含许多资源,可供您开始使用python-telegram-bot

其他参考文献:

以身作则学习

我们认为学习这个套餐最好的方法就是身体力行。这里有一些例子供您复习。即使这不是你的学习方法,也请看看echobot.py,它是大多数机器人的事实上的基地。最棒的是,这些示例的代码都发布到了公共领域,因此您可以从获取代码并在其上构建开始

参观this page要了解官方示例或查看wiki查看社区构建的其他机器人

日志记录

此库使用logging模块。要将日志记录设置为标准输出,请放入:

import logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

在脚本的开头

还可以在应用程序中使用日志,方法是调用logging.getLogger()并设置所需的日志级别:

logger = logging.getLogger()
logger.setLevel(logging.INFO)

如果您需要调试日志,请执行以下操作:

logger.setLevel(logging.DEBUG)

文档

python-telegram-bot的文档存放在readthedocs.io

获取帮助

您可以通过以下几种方式获得帮助:

  1. 我们有一个充满活力的开发人员社区,他们在我们的Telegram group加入我们吧!
  2. 通过以下方式报告错误、请求新功能或提出问题creating an issuea discussion
  3. 我们的Wiki pages提供越来越多的资源
  4. 您甚至可以使用python-telegram-bot tag

贡献

欢迎各种规模的投稿。请查看我们的contribution guidelines开始吧。您还可以通过以下方式提供帮助reporting bugs

捐赠

偶尔会有人问我们是否接受捐款来支持这项发展。虽然我们很欣赏这个想法,但维护肺结核是我们的爱好,我们几乎没有运行成本。因此,我们没有任何接受捐款的设置。如果您仍想捐款,我们恳请您转而向您选择的另一个开源项目/倡议捐款。

许可证

您可以复制、分发和修改本软件,前提是修改的说明和许可是免费的,请参阅LGPL-3衍生品作品(包括修改或任何静态链接到库的内容)只能在LGPL-3下重新分发,但使用库的应用程序不必

Scrapy-SCRAPPY,一种用于Python的快速高级Web抓取框架

概述

SCRAPPY是一个快速的高级Web爬行和Web抓取框架,用于爬行网站并从其页面中提取结构化数据。它可以用于广泛的目的,从数据挖掘到监控和自动化测试

Scrrapy由Zyte(前身为ScrapingHub)和many other
contributors

请查看Scrapy主页,网址为https://scrapy.org有关详细信息,包括功能列表

要求

  • Python 3.6+
  • 可在Linux、Windows、MacOS、BSD上运行

安装

快捷方式:

pip install scrapy

请参阅文档中的安装部分,网址为https://docs.scrapy.org/en/latest/intro/install.html有关更多详细信息,请参阅

文档

文档在线提供,网址为https://docs.scrapy.org/而在docs目录

发布版本

你可以查一下https://docs.scrapy.org/en/latest/news.html有关发行说明,请参阅

社区(博客、Twitter、邮件列表、IRC)

看见https://scrapy.org/community/有关详细信息,请参阅

贡献

看见https://docs.scrapy.org/en/master/contributing.html有关详细信息,请参阅

行为规范

请注意,此项目随贡献者行为准则一起发布(请参阅https://github.com/scrapy/scrapy/blob/master/CODE_OF_CONDUCT.md)

通过参与此项目,您同意遵守其条款。请将不可接受的行为报告给opensource@zyte.com

使用Scrapy的公司

看见https://scrapy.org/companies/查看列表

商业支持

看见https://scrapy.org/support/有关详细信息,请参阅

Fastapi-FastAPI框架,高性能,易学,编码速度快,可投入生产

FastAPI框架,高性能,易学,编码速度快,可投入生产


文档https://fastapi.tiangolo.com

源代码https://github.com/tiangolo/fastapi


FastAPI是一种现代、快速(高性能)的Web框架,用于使用Python 3.6+基于标准Python类型提示构建API

主要功能包括:

  • 快地:非常高的性能,可与节点JS(多亏了斯塔莱特和皮丹蒂克)One of the fastest Python frameworks available
  • 快速编码:提高功能开发速度约200%至300%。*
  • 更少的错误:减少约40%的人为(开发人员)引起的错误。*
  • 直观:强大的编辑支持。无处不在的完成度。调试时间更短
  • 简单易懂:设计成易于使用和学习。减少阅读文档的时间
  • 短的:最大限度地减少代码重复。来自每个参数声明的多个功能。更少的错误
  • 健壮:获取可投入生产的代码。使用自动交互文档
  • 基于标准的:基于(并完全兼容)API开放标准:OpenAPI(以前称为Swagger)和JSON Schema

*基于对内部开发团队、构建生产应用程序的测试进行估计

意见

[.]我在用FastAPI这几天有一吨多。[.]实际上我正计划把它用在我所有团队的微软的ML服务他们中的一些人正在融入核心窗口产品和一些办公室产品

卡比尔汗-微软(ref)

我们采用了FastAPI库以派生睡觉可以查询获取的服务器预测[路德维希]

皮耶罗·莫利诺,雅罗斯拉夫·杜丁和赛苏曼斯·米利亚拉-优步(Uber)(ref)

Netflix我很高兴地宣布我们的危机管理编排框架:派单好了![使用以下组件构建FastAPI]

凯文·格利森,马克·维拉诺瓦,福里斯特·蒙森-Netflix(ref)

我欣喜若狂FastAPI太好玩了!

布莱恩·奥肯-Python Bytes播客主持人(ref)

老实说,你建造的东西看起来非常坚固和精美。在很多方面,这是我想要的拥抱一下是-看到有人建造这样的建筑真的很鼓舞人心

蒂莫西·克罗斯利-Hug创建者(ref)

如果你想学一门现代框架要构建睡觉API,请查看FastAPI[.]它快速、易用、易学。

我们已经切换到FastAPI为了我们的API接口[.]我想你会喜欢的。

Ines Montani-Matthew Honnibal-Explosion AI创始人-spaCy创作者(ref)(ref)

要求

Python 3.6+

FastAPI站在巨人的肩膀上:

安装

$ pip install fastapi

---> 100%

您还需要一台ASGI服务器用于生产,例如UvicornHypercorn

$ pip install uvicorn[standard]

---> 100%

示例

创建它

  • 创建文件main.py使用:
from typing import Optional

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}
或使用async def

如果您的代码使用async/await,使用async def

from typing import Optional

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

注意事项

如果您不知道,请查看“赶时间?”部分关于async and await in the docs

运行它

使用以下命令运行服务器:

$ uvicorn main:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [28720]
INFO:     Started server process [28722]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
关于命令uvicorn main:app --reload

该命令uvicorn main:app指的是:

  • main:文件main.py(Python“模块”)
  • app:在中创建的对象main.py用这条线app = FastAPI()
  • --reload:使服务器在代码更改后重新启动。这样做只是为了发展。

检查一下

在以下位置打开您的浏览器http://127.0.0.1:8000/items/5?q=somequery

您将看到JSON响应为:

{"item_id": 5, "q": "somequery"}

您已经创建了一个API,该API:

  • 中接收HTTP请求。路径//items/{item_id}
  • 两者都有路径拿走GET运营(也称为HTTP方法:)
  • 这个路径/items/{item_id}有一个路径参数item_id这应该是一个int
  • 这个路径/items/{item_id}有一个可选的str查询参数q

交互式API文档

现在转到http://127.0.0.1:8000/docs

您将看到自动交互API文档(由提供Swagger UI):

替代API文档

现在,请转到http://127.0.0.1:8000/redoc

您将看到替代自动文档(由提供ReDoc):

示例升级

现在修改该文件main.py接收来自PUT请求

使用标准Python类型声明Body,这要归功于Pydatics

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()


class Item(BaseModel):
    name: str
    price: float
    is_offer: Optional[bool] = None


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    return {"item_name": item.name, "item_id": item_id}

服务器应自动重新加载(因为您添加了--reload发送到uvicorn上述命令)

Interactive API文档升级

现在转到http://127.0.0.1:8000/docs

  • 交互API文档将自动更新,包括新的Body:

  • 点击[试用]按钮,即可填写参数,直接与接口交互:

  • 然后点击“执行”按钮,用户界面将与您的API进行通信,发送参数,得到结果并显示在屏幕上:

备用API文档升级

现在,请转到http://127.0.0.1:8000/redoc

  • 替代文档还将反映新的查询参数和正文:

概述

总而言之,您声明一次作为函数参数的参数类型、正文等

您可以使用标准的现代Python类型来实现这一点

您不必学习新语法、特定库的方法或类等

只是标准的Python 3.6+

例如,对于int

item_id: int

或者对于更复杂的Item型号:

item: Item

有了这一份声明,你就会得到:

  • 编辑器支持,包括:
    • 完成
    • 类型检查
  • 数据验证:
    • 数据无效时自动清除错误
    • 即使是针对深度嵌套的JSON对象的验证也是如此
  • 输入数据的转换:从网络到Python数据和类型的转换。阅读自:
    • JSON
    • 路径参数
    • 查询参数
    • 曲奇饼
    • 标题
    • 表格
    • 文件
  • 输出数据转换:从Python数据和类型转换为网络数据(如JSON):
    • 转换Python类型(strintfloatboollist等)
    • datetime对象
    • UUID对象
    • 数据库模型
    • 还有更多
  • 自动交互式API文档,包括2个替代用户界面:
    • 大摇大摆的UI
    • 复单

回到前面的代码示例,FastAPI将:

  • 验证是否存在item_id在用于的路径中GETPUT请求
  • 验证item_id类型为intGETPUT请求
    • 如果不是,客户端将看到一个有用的、明确的错误
  • 检查是否存在名为的可选查询参数q(如图所示http://127.0.0.1:8000/items/foo?q=somequery)用于GET请求
    • 作为q参数是用= None,它是可选的
    • 如果没有None这将是必需的(就像在具有以下情况的情况下的身体一样PUT)
  • PUT请求/items/{item_id},将正文读作JSON:
    • 检查它是否具有必需的属性name这应该是一个str
    • 检查它是否具有必需的属性price那一定是一个float
    • 检查它是否具有可选属性is_offer,那应该是一个bool,如果存在
    • 所有这些也适用于深度嵌套的JSON对象
  • 自动从JSON转换为JSON或自动转换为JSON
  • 使用OpenAPI记录可由以下人员使用的所有内容:
    • 交互式文档系统
    • 自动客户端代码生成系统,适用于多种语言
  • 直接提供2个交互式文档web界面

我们只是触及了皮毛,但您已经对它的工作原理有了大致的了解

尝试使用以下命令更改行:

    return {"item_name": item.name, "item_id": item_id}

出发地:

        ... "item_name": item.name ...

收件人:

        ... "item_price": item.price ...

并查看您的编辑器将如何自动完成属性并了解其类型:

有关包含更多功能的更完整示例,请参阅Tutorial – User Guide

剧透警报:教程-用户指南包括:

  • 的声明参数从其他不同的地方,如:标题曲奇饼表单域文件
  • 如何设置验证约束作为maximum_lengthregex
  • 一款功能非常强大且易于使用的依赖项注入系统
  • 安全性和身份验证,包括支持OAuth2使用JWT代币HTTP Basic身份验证
  • 更高级(但同样简单)的声明技术深度嵌套的JSON模型(多亏了皮丹蒂克)
  • 许多额外功能(感谢Starlette),如:
    • WebSockets
    • 图形QL
    • 极其简单的测试,基于requestspytest
    • CORS
    • Cookie会话
    • 还有更多

性能

独立TechEmpower基准显示FastAPI在Uvicorn AS下运行的应用程序one of the fastest Python frameworks available,仅低于Starlette和Uvicorn本身(由FastAPI内部使用)。(*)

要了解更多信息,请参阅小节Benchmarks

可选依赖项

由Pydtic使用:

由Starlette使用:

  • requests-如果要使用TestClient
  • aiofiles-如果要使用,则为必填项FileResponseStaticFiles
  • jinja2-如果要使用默认模板配置,则为必填项
  • python-multipart-如果您想支持表单“解析”,则为必填项,带有request.form()
  • itsdangerous-需要用于SessionMiddleware支持
  • pyyaml-Starlette的必填项SchemaGenerator支持(FastAPI可能不需要)
  • graphene-需要用于GraphQLApp支持
  • ujson-如果要使用,则为必填项UJSONResponse

由FastAPI/Starlette使用:

  • uvicorn-对于加载和服务您的应用程序的服务器
  • orjson-如果要使用,则为必填项ORJSONResponse

您可以使用以下命令安装所有这些组件pip install fastapi[all]

许可证

这个项目是根据麻省理工学院的许可条款授权的。

Django-为有最后期限的完美主义者准备的Web框架

Django是一个高级Python Web框架,它鼓励快速开发和干净、实用的设计。感谢您的查看

所有文档都在“docs”目录中,并在线访问https://docs.djangoproject.com/en/stable/.如果您刚刚开始,以下是我们建议您阅读文档的方法:

  • 首先,阅读docs/info/install.txt以获得有关安装Django的说明
  • 接下来,按顺序学习教程(docs/info/tutorial01.txt、docs/info/tutorial02.txt等)。
  • 如果要设置实际的部署服务器,请阅读docs/HOWTO/Deployment/index.txt以获取说明
  • 接下来,您可能想要通读主题指南(在文档/主题中);从那里您可以跳到HOWTO(在文档/HOWTO中)以了解特定问题,并查看参考资料(Docs/ref)以了解血淋淋的详细信息
  • 有关构建文档的HTML版本的说明,请参见docs/readme

文档会严格更新。如果您在文档中发现任何问题,或者认为应该以任何方式加以澄清,请在这里花30秒填写一张罚单:https://code.djangoproject.com/newticket

要获得更多帮助,请执行以下操作:

  • 加入irc.Libera.chat上的#Django频道。那里有很多乐于助人的人。如果您刚接触irc,请访问https://web.libera.chat。
  • 加入Django-Users邮件列表,或在https://groups.google.com/group/django-users上阅读存档

要对Django做出贡献,请执行以下操作:

  • Check out https://docs.djangoproject.com/en/dev/internals/contributing/ for
    information about getting involved.

要运行Django的测试套件,请执行以下操作:

  • Follow the instructions in the “Unit tests” section of
    docs/internals/contributing/writing-code/unit-tests.txt, published online at
    https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/unit-tests/#running-the-unit-tests

Supporting the Development of Django

Django 的发展有赖于你们的贡献。

如果您依赖Django,请记住支持Django软件基金会:https://www.djangoproject.com/fundraising/