~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
章节模式
复制地址