May 25, 2017

Nougat(Misuzu) 的进展和改变

Misuzu 这个名字被人吐槽了很久,不知道怎么读,也不知道什么意思。所以就改成了 Nougat 这个名字,意为牛轧糖。

handler 参数

handler 的参数从原来的 request 改成了 ctx 。相比于前者, ctx 增加了 requestapp 的支持。

因为 Nougat 这个框架不像 Flask 那样使用子线程的方式来处理。 所以 Flask 中的 url_forabort 不能裸露使用。因此必须依赖上下文(Flask 可以在线程池中依靠线程ID 寻找上下文)。所以一定要这样使用something.url_for()something.abourt

url_for abort redirect 这些操作放在 request 中感觉不三不四的。因此采用了ctx的写法。

所以handler 的写法就变成了一下的样子:

async def handler(ctx):
	pass

Middleware

原来那种以类的形式来写 middleware,过于累赘,而且不支持异步操作。因此改为 koa-like 的方式来写。

async def middleware(ctx, next):
    # doing before handler
    await next()  # doing handler
    #doing after handler

还有一些小小的改进

  • 使用 yarl.URL 来格式化 URL, 比我自己写更加高效,更加可信
  • register_middlewareregister_section 改用 use 。更加简约
  • 完善了文档
  • 使用了激进的TOML 来做项目配置文件,并且同伴完成了Config 模块的编写,不过还需要我重构一次

不过还是需要有一些等待修改的地方(都是我现在能想到的):

  • 对于现在 ctx.params的读取方式不太满意,应该重构以下
  • 返回内容的格式化还没写
  • param_group 或者叫 params 方法,一次性读入多个通用参数
  • 文档自动化的集成

并且,从现在开始 Nougat 从原来的pre-alpha 进入了alpha 状态,意味着可以尝试投入工程中使用了。

我也会写一个工程去尝试以下 Nougat 的可用性。