📜  TurboGears-环境(1)

📅  最后修改于: 2023-12-03 15:35:23.095000             🧑  作者: Mango

TurboGears-环境介绍

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常用功能
控制器Controllers

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")。

模型Models

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形式来操作数据库。

视图Views

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变量的值来替换。

路由Routes

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路径。

身份验证Authentications

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-环境的介绍及常用功能的使用。