Quantcast
Channel: CodeSection,代码区,Python开发技术文章_教程 - CodeSec
Viewing all articles
Browse latest Browse all 9596

TurboGears入门

$
0
0

近期找到了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 属性来获取的。


Viewing all articles
Browse latest Browse all 9596

Trending Articles