MOMOJI.故事接龙·让我们一起讲故事,做个有故事的人

momoji.技术架构及算法

~pyramid tween~
{ 任一段落可 [ 切到该章节 ] 进行续写接龙 }

~momoji.技术架构及算法~

选取python3为开发语言,版本python 3.7.3;

web架构为pyramid;

数据库访问采用sqlalchemy;

使用jinja2模板,也提供api,但非完全前后端分离;

前端使用了echarts2;

考虑该站点依靠iis挂了几个应用,80端口已占就用iis做了application request routing 和 url rewrite,后续考虑换为nginx;

数据库mysql,版本mysql 8.0.16.0;后续考虑换位文件系统;

存储结构具有为单父属性的节点,即tree或者multi-tree;但最终实现可成环的有向图,非dag(因为有向且成环);

momoji.技术架构及算法 by 飞~甜 @ 2019-06-11 14:56:51

切到该章 收藏 从此续写

~python,pyramid,sqlalchemy~

这是我第一次用python和pyramid来写web站点,之前用的较多的是java/c#/asp.net/asp/php;python给了我全新的体验:

pyramid的route配置;简洁的语法;简洁的对象生成:dict/list/tuple/json; 

sqlalchemy也秉承了python简洁的特点,orm没有hibernate的繁琐,不用写各种interface和implements;

美中不足:

虽是脚本语言,但是强类型,没有编译过程,也就没有编译期检测,需要在运行期发现类型错误,在request参数获取后,没有转换为正确的数据类型(比如int)而踩坑;

用缩进作为代码作用域范围;tab和空格问题;

----总体说来,快乐大于痛苦:)

python,pyramid,sqlalchemy by 飞~甜 @ 2019-06-11 15:17:25

切到该章 收藏 从此续写

~pyramid tween~

找到与mvc filter/interceptor类似的机制:tween
 自定义的tween可以被config.add_tween()加入到配置中,从而对request-response处理过程前后加入自己对request和response的处理逻辑;例如,如下是记录每一个请求处理过程消耗时间的一个tween:
 def timing_tween_factory(handler, registry):
     if asbool(registry.settings.get('do_timing')):
         # if timing support is enabled, return a wrapper
         def timing_tween(request):
             start = time.time()
             try:
                 response = handler(request)
             finally:
                 end = time.time()
                 url = request.url
                 log.debug('The request [%s] took %s seconds' % (url,(end - start)) )
             return response
         return timing_tween
     # if timing support is not enabled, return the original
     # handler
     return handler
 在main()函数中,将以上的tween factory注册进来:
 config.add_tween('.tweens.timing_tween_factory')
 并在.ini文件中加入与代码中对应的配置项
 [app:main]
 ...
 do_timing = true
 可以在main()中通过config.add_tween()注册多个tween factory,调用的顺序与注册代码顺序相反(压栈,先进后出),也可以通过此函数的两个kwargs(over=,under=)显性地对tween的执行顺序进行设置,显性设置后与代码顺序无关,其中over=是先于,under=是后于;比如:
 config.add_tween('myapp.tween_factory1', over=pyramid.tweens.MAIN)
 config.add_tween('myapp.tween_factory2', over=pyramid.tweens.MAIN, under='myapp.tween_factory1')
 可以通过ptweens development.ini来查看执行tween链的执行顺序:
 INGRESS (implicit)
 pyramid.tweens.excview_tween_factory (implicit)
 myapp.tween_factory1
 myapp.tween_factory2
 MAIN (implicit)
 
 我想tween可以同mvc中的filter一样类似公共权限检测之类的事情;
  

pyramid tween by 飞~甜 @ 2019-07-06 16:29:55

切到该章 收藏 从此续写

last by 飞~甜 @ 2019-07-06 16:29:55

章节模式 复制地址