Controller Web2PY con parametri?
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?
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.