📅  最后修改于: 2023-12-03 15:35:23.095000             🧑  作者: Mango
TurboGears是一个开源的Python web开发框架,目前正在使用在许多大型的Python web应用程序中,能够帮助开发者快速创建高效稳定的web应用程序。本文将为您介绍TurboGears的环境搭建过程以及TurboGears的常用功能。
为了正常使用TurboGears,在安装之前,需要先安装一个包管理工具pip,可以使用以下命令来安装pip:
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py --user
安装完pip之后,就可以通过pip来安装TurboGears了,使用以下命令来安装TurboGears:
$ pip install tg.devtools
安装完毕后, 我们可以使用以下命令来检验turboGears是否安装成功:
$ tg-admin info
运行以上命令,将会显示TurboGears的相关信息,说明TurboGears安装成功。
TurboGears使用控制器来处理与URL相关的请求,负责接收HTTP请求,调用适当的函数来创建HTML,并将其发送回客户端浏览器。 下面是一个简单的控制器示例:
import tg
# GET请求处理
@tg.expose("/")
def index():
return "Hello World!"
# POST请求处理
@tg.expose("/user", method="POST")
def create_user(name, email):
return "User created"
上面的代码中,@tg.expose
装饰器将函数注册为控制器方法。 "method"
可选参数指定HTTP方法(默认为"GET")。
TurboGears使用SQLAlchemy作为其ORM对象关系映射器。
from sqlalchemy import Column, Integer, String
from tg import TGController
from tgext.crud import EasyCrudRestController
# 映射数据库中的users表
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
email = Column(String(120), unique=True)
class UserController(EasyCrudRestController):
__model__ = User
在上面的代码中,我们使用EasyCrudRestController
创建一个用户管理的控制器,采用ORM形式来操作数据库。
TurboGears使用Mako模板引擎来生成视图。
<html>
<head>
<title>${title or "Default Title"}</title>
</head>
<body>
<h1>${title or "Default Header"}</h1>
# 获取到"users"变量的值并输出
<ul>
% for user in users:
<li>${user.name} : ${user.email}</li>
% endfor
</ul>
</body>
</html>
在上面的代码中,我们可以看到mako模板引擎的使用方式,${value}将会在生成的HTML代码中使用value变量的值来替换。
TurboGears通过路由系统将请求路由到控制器方法。路由系统支持RESTful URL格式。
import tg
class RootController(tg.RootController):
user = UserController('users')
# 定义URL映射
@tg.expose("/")
def index():
return "Welcome to TurboGears"
在上面的代码中,tg.RootController
允许根控制器上挂在其他控制器。"/"
的定义来匹配根URL路径并返回欢迎信息。user
控制器映射到"/users" URL路径。
TurboGears提供了许多身份验证方式,包括数据库身份验证、LDAP身份验证和OpenID身份验证等。
import tg
from tgext.pluggable import plug
# 导入tg身份验证模块
from tgext.auth import SecureController, PasswordlessAuthenticator, \
TGAuthMetadata, TGAuth
class MyAuthenticator(PasswordlessAuthenticator):
# 身份验证方法
def authenticate(self, environ, identity):
if identity['password'] == 'secret':
return identity['login']
return None
class MyAuthMetadata(TGAuthMetadata):
def __init__(self, skip_authentication=False, **kwargs):
super(MyAuthMetadata, self).__init__(skip_authentication=skip_authentication, **kwargs)
self.authenticators = [MyAuthenticator()]
class RootController(SecureController):
allow_only = TGAuthMetadata(skip_authentication=True)
user = UserController('users')
# 定义登录方法
@tg.expose()
def login(self, came_from=None, **kw):
if tg.request.method == 'POST':
identity = {'login': kw['login'], 'password': kw['password']}
if self._perform_login(identity):
tg.redirect('/private')
else:
tg.flash("Login failed")
return dict(came_from=came_from, login=kw.get('login', ''))
上面的代码中,我们定义了身份验证和身份验证元数据。SecureController
可以用来装饰需要身份验证的控制器。在RootController
中我们定义了一个登录方法用来处理系统登录请求。
TurboGears拥有丰富强大的功能,提供了很好的灵活性,适用于中小型web应用项目。以上是TurboGears-环境的介绍及常用功能的使用。