Also ein bisschen Setup. In web2py können Sie einfach eine Controller-Funktion dekorieren sie als json Service zu belichten, etwa so:Wie vermeidet man mehrere Service-Objekte bei der Verwendung eines JSON-Dienstes in einem web2py-Modul?
def call():
return service()
@service.json
def do_something():
return "blah"
Dann können Sie es nennen (wie in einer Ajax-Request) wie "Call/json/do_something" und Sie werden bekomme "blah", formatiert in json.
Sie können dies in einem Modul in einer Klasse tun, etwa so:
from gluon.tools import Service
service = Service()
class SomeClass(object):
@staticmethod
@service.json
def do_something():
return "blah"
Also in Ihrem Controller, dies zu tun:
import mymodule
def m_call():
return mymodule.service()
def call():
return service()
@service.json
def do_another_thing():
return "blee"
Und dann in einer Ansicht, die ich anrufen kann entweder "m_call/json/do_something" oder "call/json/do_another_thing". Das funktioniert, ABER ich habe jetzt mehrere Möglichkeiten, json-Dienste aufzurufen. Es ist ein auf den Kopf dazu, dass die Moduldienste unterschiedlich scoped sind, aber zumindest unter bestimmten Umständen möchte ich in der Lage sein, etwas wie dies in meinem Controller zu tun:
import mymodule
def call():
# This obviously does NOT work, but shows what I WANT to do
service.merge_with(mymodule.service)
return service()
Das Ergebnis ist, dass alle meine Dienste (oder was auch immer ich will) sind in einem einzigen Serviceobjekt verfügbar und können mit der gleichen Syntax aufgerufen werden, unabhängig davon, wo die Funktion in meiner Anwendung ist. Gibt es eine Möglichkeit, dies zu tun?
Wow, das funktioniert super! Danke, Anthony. Und ja, aus diesem Beispiel sehe ich, dass es einfach wäre, eine bestimmte Teilmenge der Serviceobjekte zu aktualisieren. – TheGerm