近期找到了1个新的工作的地方,在这里同事都是90后还算比较好说话,不过这里的一些技术就不多说了,习惯使用python版本2.7的我竟然要写3.5的代码,说起来也是心累,坑多。
另外,在这里采用的Web框架竟然是TurboGears2,1个不怎么好用,且知名度也咋地的框架。
安装与运行在TurboGears2中,运行这个Web主要有2种方式,1种是最简单的模式,类似Flask那种单文件的形式,其代码类似如下:
from wsgiref.simple_server import make_server from tg import expose, TGController, AppConfig class RootController(TGController): @expose() def index(self): return "<h1>Hello World</h1>" config = AppConfig(minimal=True, root_controller=RootController()) print "Serving on port 8080..." httpd = make_server('', 8080, config.make_wsgi_app()) httpd.serve_forever()另1种是全栈的方式,即类似Pyramid、Django那种通过模板生成对应代码的方式,在这里我们需要进行如下的操作:
$ virtualenv env $ pip install tg.devtools $ gearbox quickstart myproj在这里,我们先生成虚拟环境,然后安装的是 tg.devtools 包,然后通过gearbox命令快速生成1个项目,实际上比较类似Pyramid的感觉。
接着我们需要对生成的项目进行安装:
$ cd myproj $ pip install -e . $ gearbox serve --debug --reload在这里我们进入我们之前生成的项目中,然后进行本地的安装后,使用serve命令进行服务器运行,在这里我们添加来2个选项 --debug 和 --reload 开启调试和重载模式,这样就不需要修改代码后重启服务器。
在TurboGears中,在类中的函数表示的就是路由中的URL地址,比如上述的index函数,对应于 /index 这样的路由,使用起来真的有点别扭。
模板在TurboGears模板中,其模板采用的是Kajiki模板语言,1种XML的模板语言。实话说,这个模板极其繁琐,因为如果你的HTML代码写的不完整就无法通过,比如:
<meta charset="UTF-8">在这个单标签中中,由于我们没有添加斜杠会导致模板运行时出现如下的错误 mismatched tag :
kajiki.xml_template.XMLTemplateParseError: [/home/dog/proj/proj/templates/master.xhtml:13] mismatched tag可以看到,其错误情况是标签不匹配。我们需要对错误之前的标签进行查看才能进行排查。其正常的写法如下:
<meta charset="UTF-8" />另外1种情况就是标签中属性不完整会出现类似如下的错误 not well-formed (invalid token) :
kajiki.xml_template.XMLTemplateParseError: [/home/dog/proj/proj/templates/master.xhtml:46] not well-formed (invalid token)不过这种情况错误出现在对应的行上。在这里我们的HTML源代码为:
<input type="text" required>对应这种情况我们需要将其属性补全,例如上面需要修改为:
<input type="text" required="required">另外,默认的静态文件是放在public目录下,在模板进行进行如下的操作即可:
<img src="${tg.url('/img/1.jpg')}"/>这样它就会查找 public/img 目录下的对应的图片了。
请求参数在TurboGears中请求参数,比如GET和POST请求可以通过如下的方式来获取:
from tg import request print(request.args_params)在这里我们导入request对象,其代表Request对象,主要封装在 tg.request_local 模块中。对于GET和POST参数,主要通过该对象的 args_params 属性来获取的。