Você está aqui: Página Inicial Documentação Tutoriais Tutorial CherryPy Recebendo dados de formulários e Configurando o CherryPy
Ações do documento

Recebendo dados de formulários e Configurando o CherryPy

Mostra detalhes sobre esses dois conceitos

dirceu

Tradução de http://docs.cherrypy.org/cherrypy-tutorial
Página 3 de 4.

Chamando outros métodos

CherryPy pode também chamar diretamente métodos dos objetos publicados se ele receber uma URL que seja diretamente mapeada para esses métodos. Por exemplo:


def foo():
return 'Foo!'
foo.exposed = True

cherrypy.root.foo = foo

No exemplo, cherrypy.root.foo contém uma função chamada foo. Quando o CherryPy recebe uma requisição para a URI /foo ele automaticamente chama a função foo(). Note que isso pode ser uma função simples, um método ou qualquer outro objeto executável ("callable").

Em alguns casos avançados pode haver um conflito quando o CherryPy tenta decidir que método aplicar à uma requisição. O método index() tem precedência, mas se o CherryPy encontra uma URL com o caminho todo válido e com o último objeto no caminho sendo executável (o que significa qualquer método, função ou objeto Python que suporte o método __call__); e por fim, se o objeto executável não conter ele mesmo um método index() válido, então o objeto em si vai ser executado. Essas regras são necessárias porque as próprias classes são executáveis em Python; executá-las produz uma nova instância. Pode parecer confuso, mas as regras são bem simples de serem usadas na prática.

Recebendo dados de formulários HTML

Qualquer método que é executado pelo CherryPy - seja index ou qualquer outro - pode receber dados de formulários HTML usando keyword arguments. Por exemplo, o formulário de login abaixo envia username (nome de usuário) e  password (senha) como argumentos usando o método POST:

<form action="doLogin" method="post">
<p>Username</p><br>
<input name="username" size="15" maxlength="40" type="text"><br>
<p>Password</p><br>
<input name="password" size="10" maxlength="40" type="password"><br>
<p><input value="Login" type="submit"></p><br>
<p><input value="Clear" type="reset"></p><br>
</form>
O código abaixo pode tratar essa URL:

class Root:
def doLogin(self, username=None, password=None):
# check the username & password
...
doLogin.exposed = True

cherrypy.root = Root()

Ambos os argumentos tiveram que ser declarados como keyword arguments. O valor padrão pode ser usado tanto para  prover um valor padrão para valores opcionais ou para prover um meio da aplicação saber se algum parâmetro da requisição está faltando.

CherryPy suporta ambos os métodos GET e POST para formulários. Argumentos são passados do mesmo jeito, independente do método utilizado pelo navegador web para mandar os dados para o servidor web.

O arquivo de configuração do CherryPy


O CherryPy usa um simples arquivo de configuração para customizar alguns aspectos do seu comportamento. O arquivo de configuração pode ser editado com qualquer editor de textos convencional (até mesmo o Bloco de Notas), e pode ser usado inclusive por "usuários comuns" (não-técnicos) para algumas customizações simples. Por exemplo:


[global]
server.socket_port = 8000
server.thread_pool = 10
session_filter.on = True
static_filter.root = "/home/site"

[/static]
static_filter.on = True
static_filter.dir = "static"

Muitos dos valores são auto-explicativos (por exemplo, server.socket_port, que habilita a mudança da porta padrão na qual o CherryPy "escuta" requisições); outras necessidades precisam de um entendimento maior sobre os mecanismos internos do CherryPy.

  • A opção server.thread_pool determina quantas threads o CherryPy vai usar para servir requisições.
  • A expressão static_filter.root especifica o diretório de onde os arquivos estáticos serão servidos.
  • A expressão [/static] especifica que o conteúdo estático vindo de /home/site/static/* é servido como /static/*
  • A expressão session_filter.on habilita o suporte à sessões. Sessões são necessárias para implementar aplicações web complexas com identificação de usuários, por exemplo.

O nome do arquivo de configuração pode ser passado como argumento para o método update(); os valores vão ser lidos exatamente antes do servidor iniciar:


cherrypy.config.update(file="myserver.conf")
cherrypy.server.start()

As configurações podem também ser definidas como código Python puro usando dicionários e passando-os  diretamente para cherrypy.config.update.

cherrypy.server.start

A definição de cherrypy.server.start() é:


def start(self, init_only=False, server_class=_missing):
"""
Main function. All it does is this:
- read/parse config file if any
- create response and request objects

- start HTTP server
"""

Para mudar a configuração da sua aplicação você pode passar um dicionário como keyword parameter para  cherrypy.config.update() como no exemplo abaixo:


cherrypy.config.update({
'global': {
'server.socket_port' : 8888,
'server.thread_pool' : 10 }})

 
por Dirceu Pereira TiegsÚltima modificação 11/05/2006 09:01
Contribuidores: Remi Delon (Autor), Dirceu Pereira Tiegs (Tradutor)
Creative Commons

O conteúdo deste site está sob licença Creative Commons