Web2Py -Controller mit Parametern?
Frage
Ich erstelle eine App mit Web2Py -Framework ... Ich möchte nicht das Anforderungsobjekt verwenden müssen, um alle QueryString -Parameter zu erhalten. Statt (oder Formata) Wörterbuch in die benannten Parameter und rufen Sie meinen Controller auf.
Also statt einer Controller -Methode von
create_user():
wo ich das global Request () Objekt () verwenden und durch die VARS -Liste schauen würde ... Ich würde es vorziehen, stattdessen zu haben
create_user(first_name, last_name, email):
Wie ich auf anderen MVC -Plattformen sehe.
Ist das schon in Web2Py möglich? Oder gibt es ein Plugin dafür? Oder muss ich das selbst hinzufügen?
Lösung
Nein. Wie in der angegeben Buchen, eine URL der Form
http://127.0.0.1:8000/a/c/f.html/x/y/z?p=1&q=2
Karten zur Anwendung (Ordner) a
, Controller (Datei) c.py
, Funktion f
, und die zusätzlichen Argumente müssen aus dem Anforderungsobjekt als ausgepackt werden
x, y, z = tuple(request.args)
p = request.vars['p'] # p=1
q = request.vars['q'] # q=2
Darüber hinaus erkennt Web2Py gültige Controller -Funktionen als die Funktionen, die keine Argumente haben. AFAICR, dies ist entgegengesetzt zu Django, das gültige Controller -Funktionen als solche erfasst, die mindestens ein Argument haben.
Andere Tipps
Ich tue
def create_user():
try:
first_name, last_name, email = request.args[:3]
except:
redirect('some_error_page')
Achten Sie jedoch darauf, dass First_Name, Last_Name und E-Mail möglicherweise Zeichen enthalten, die im path_info nicht zulässig sind (Web2Py in Picky, wenn dies nur [ w -.] Validiert ist, sind erlaubt).
Es gibt einen Umstand, unter dem Web2Py -Controller Parameter verwenden können. Wenn eine Controller -Funktion den @Service -Dekorator hat, können Parameter verwendet werden, je nach Service -Typ, z. B.:
@service.jsonrpc
def somefunction(a=None, b='default'):
## whatever
Dieser Ansatz ist für die Zeit, in der eine Controller -Funktion wirklich eine API ist, keine Möglichkeit, eine Webansicht zu generieren. Es gibt schöne Dinge, die Sie tun können, um die Funktionen im Web-View- und API-Stil parallel zu definieren und die Webansichten die API-Funktionen aufzurufen, um sicherzustellen, dass Sie eine gute Trennung von Ansichten und Controllern haben.
Abhängig davon, wie Sie die Verantwortung zwischen dem Web-Client / JavaScript, der Web2Py-Ansicht und dem Web2Py-Controller teilen, kann es sinnvoll sein, Controller-Funktionen zu haben, die wirklich APIs (mit optionalen Parametern) sind, anstatt die Parameter-Unpacking-Logik in zu erstellen Ein Web-View-Style-Controller.