Domanda

Sto costruendo un'app utilizzando Web2Py Framework ... Non voglio utilizzare l'oggetto richiesta per ottenere tutti i parametri di querystring, invece mi piacerebbe creare il mio controller con parametri denominati e far ripartire il router la querystring (o dati moduli) Dizionario nei parametri denominati e chiama il mio controller.

Quindi invece di un metodo controller di

create_user():

dove userei l'oggetto Global request () e guardare attraverso l'elenco vars ... preferirei invece di avere

create_user(first_name, last_name, email):

Come vedo in altre piattaforme MVC.

È già possibile in Web2PY? O c'è un plugin per questo? O devo aggiungerlo da solo?

È stato utile?

Soluzione

No. come indicato nel prenotare, un URL della forma

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

Mappe all'applicazione (cartella) a, controller (file) c.py, funzione f, e gli argomenti aggiuntivi devono essere disimballati dall'oggetto di richiesta come

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

Inoltre, Web2PY rileva specificamente le funzioni del controller valide come funzioni che non hanno argomenti. AFAICR, questo è opposto a Django che rileva le funzioni di controller valide come quelle che hanno almeno un argomento.

Altri suggerimenti

Io faccio

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

Ma mente che First_name, last_name e l'e-mail possono contenere caratteri che non sono consentiti nel path_info (Web2py in Picchia quando si convalidano solo [ W -.] Sono consentiti).

Esiste una circostanza in cui i controller Web2PY possono utilizzare i parametri. Quando una funzione controller ha il decoratore @service, è possibile utilizzare i parametri, a seconda del tipo di servizio, ad esempio:

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

Questo approccio è per quando una funzione controller è davvero un'API, non un modo per generare una vista web. Ci sono cose carine che puoi fare in termini di definizione di funzioni Web View e in stile API in parallelo e avere le viste Web chiama le funzioni API, per assicurarti di avere una buona separazione di viste e controller.

A seconda di come si sceglie di dividere le responsabilità tra il client Web / JavaScript, la vista Web2py e il controller Web2PY, può avere senso avere funzioni controller che sono veramente API (con parametri opzionali) anziché costruire la logica di unpacking dei parametri in Un controller di stile Web-View.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top