Pergunta

Estou construindo um aplicativo usando a estrutura Web2py ... Não quero usar o objeto de solicitação para obter todos os parâmetros de consulta, em vez disso, gostaria de construir meu controlador com parâmetros nomeados e fazer com que o roteador descompacte o querystring (ou dados de formulário) Dicionário nos parâmetros nomeados e chama meu controlador.

Então, em vez de um método controlador de

create_user():

onde eu usaria o objeto global request () e procuraria a lista de vars ... eu preferiria ter

create_user(first_name, last_name, email):

Como eu vejo em outras plataformas MVC.

Isso já é possível no web2py? Ou existe um plugin para isso? Ou preciso adicionar isso sozinho?

Foi útil?

Solução

Não. Conforme declarado no livro, um URL da forma

http://127.0.0.1:8000/a/c/f.html/x/y/z?p=1&q=2

Mapas para aplicação (pasta) a, controlador (arquivo) c.py, função f, e os argumentos adicionais devem ser descompactados do objeto de solicitação como

x, y, z = tuple(request.args)
p = request.vars['p'] # p=1
q = request.vars['q'] # q=2 

Além disso, o Web2py detecta especificamente as funções do controlador válido como as funções que não têm argumentos. AFAICR, isso é oposto ao Django, que detecta funções válidas do controlador como aquelas que têm pelo menos um argumento.

Outras dicas

Eu faço

def create_user():
    try:
        first_name, last_name, email = request.args[:3]
    except:
        redirect('some_error_page')

Mas lembre-se de que o First_Name, Last_Name e Email podem conter chars que não são permitidos no path_info (Web2py em exigente ao validar que apenas [ w -.] são permitidos).

Há uma circunstância em que os controladores Web2py podem usar parâmetros. Quando uma função do controlador possui o Decorador do @Service, os parâmetros podem ser usados, dependendo do tipo de serviço, por exemplo:

@service.jsonrpc
def somefunction(a=None, b='default'):
    ## whatever

Essa abordagem é para quando uma função de controlador é realmente uma API, não uma maneira de gerar uma visualização da Web. Há coisas boas que você pode fazer em termos de definição de funções de visualização da web e estilo API em paralelo, e fazer com que as visualizações da Web chamem as funções da API, para garantir que você tenha uma boa separação de visualizações e controladores.

Dependendo de como você optar por dividir responsabilidades entre o cliente da Web / JavaScript, a visualização Web2py e o controlador Web2py, pode fazer sentido ter funções de controlador que são realmente APIs (com parâmetros opcionais) em vez de criar a lógica de embalagem de parâmetros em um controlador de estilo de visão da web.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top