跳转到主要内容

GH3 Python WSGI纳米框架。

项目描述

gh3 Python WSGI nanoframework

if you are not already there, read this doc with API links working
in all their glory on the
[website](https://gh3-website.web.app/README.html)

第一个应用

import gh3

def say_hello(ctx: gh3.Context):
  """A view handler that returns some text."""
  ctx.reply_text('hello, world')

# Create the app, add a route, and start the debug server.
app = gh3.App()
app.add_route('/', say_hello)
app.debug()

在这里,我们创建了一个 gh3.App 实例,并向其添加了一个简单路由,并启动了调试服务器。

您可以立即看到请求处理器的某些特性

  • 您可以在 gh3.Context 中就地修改响应。
  • 要制作一个简单的文本响应,可以使用 reply_text,对于 reply_htmlreply_json 也有类似的方法。这些 reply_ 方法是设置响应数据、响应内容类型和响应状态码的快捷方式。

测试

我们通过调用 gh3.App.tester 使用 Werkzeug 的测试基础设施,获取一个 werkzeug测试客户端 并使用它来对您的应用程序进行请求。有关许多示例,请查看gh3测试套件。

您可以在视图中测试请求上下文,例如。

def text_view(ctx):
  assert '/' == ctx.req.path
  ctx.reply_text('ok')

app = gh3.App()
app.add_route('/', text_view)
resp = app.tester().get('/')
assert 200 == resp.status_code

我们在上面做出了2个断言

  1. 响应是200
  2. 视图中的请求路径是 /

您可以使用上面的模式测试上下文中的任何内容。

安装

virtualenv -p python3.9 env
./env/bin/pip install gh3

路由处理程序参数

路由参数在 ctx.endpoint_args 中可用。它们不会被传递给处理程序函数,因为所有处理程序函数都只接受请求上下文作为参数。

import gh3

def say_hello(ctx: gh3.Context):
  """A view handler that returns some text."""
  user = ctx.endpoint_args['user']
  ctx.reply_text(f'hello, {user}')

# Create the app, add a route, and start the debug server.
app = gh3.App()
app.add_route('/<user>', say_hello)
app.debug()

路由、目标和端点

正如上面的简单示例中一样,有一个路由 '/' 和一个目标,即 say_hello 函数。没有描述的是,端点是根据函数名称推断出来的,但可以显式设置

app.add_route('/', say_hello, endpoint='home')

端点用于URL的反向查找。

更复杂的路由

通过使用 add_ruleadd_target,可以访问 Werkzeug 的所有路由范围。例如,要使用 Werkzeug 的 Submount 规则工厂,应手动创建规则并添加目标处理程序。

rule = gh3.wz_routing.Submount(
    Rule('/', endpoint='blog/index'),
    Rule('/entry/<entry_slug>', endpoint='blog/show')
)

app.add_rule(rule)
app.add_target('blog/index', my_blog_index_handler)
app.add_target('blog/show', my_blog_show_handler)

为什么?

我喜欢 Werkzeug,但真的很不喜欢 Flask(抱歉,Armin)。我发誓我使用过 Flask,在大型的生产应用中(每年服务数十亿页面)。Flask 中有一些模式,让我作为一支大型(30+人)工程团队的一部分进行开发变得极其困难,gh3 故意省略了这些内容。gh3 从来不会像 Flask 一样功能丰富,这也是可以接受的。请原谅我这几百行经过良好测试的代码。如果您仍然想知道为什么,请随时继续。

项目详情


下载文件

下载适合您平台文件的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。

源分布

gh3-1.0.4.tar.gz (10.9 kB 查看哈希值)

上传时间

构建分布

gh3-1.0.4-py3-none-any.whl (6.3 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面