Frage

Ich bin mit Pylonen und meine Wirkung Controller ist:

 class UserController(BaseController):

      def create(self):
           name = request.POST['name']
           email = request.POST['email']
           password = request.POST['password']
           ...

Aber ich fand in turbogears, was ich tun kann wie folgt aus:

 class UserController:

      def create(self, name, email, password):
           ...

Wie das gleiche in Pylonen zu tun?


UPDATE

Ich habe in Google gesucht, und in einigen anderen Foren gefragt, aber noch keine Antwort bekommen. Niemand weiß (oder daran interessiert sind) eine solche Frage?

War es hilfreich?

Lösung

Es klingt wie Sie Argumente geben, um die create() Methode des Controllers mögen, die direkt aus den Elementen der POST-Daten abgeleitet. Sie können dies tun, aber es ist ziemlich knifflig.

Der kürzeste Weg, es zu tun - eine fragile Weise -. Wäre, wie so die Aktion zu definieren, diese Umgebungsvariablen als Standardwert für die Aktion mit

class UserController(Base):
  def create(self, name=request.POST['name'], email=request.POST['email'], ...):
        ...

Die Sache ist, dass, obwohl es umständlich erscheinen mag, die erste Methode, die Sie wahrscheinlich zeigten ein besserer Weg, es zu tun, weil es Ihnen mehr Raum gibt anmutig erholen sie von diesen Variablen nicht das, was Sie erwarten, dass sie zu sein.

Wenn Sie das Gefühl, wirklich knifflig erhalten, können Sie diese Logik in routing.py schieben. Die POST-Daten bereits dort vorhanden, nur nicht so direkt, weil Logik wie dies in Ihrem Controller gehört. Sie würden verwenden, um eine bedingte Methode in Routes , die Sie auf environ[wsgi.input] , die die POST-Daten haben, dann die gewünschten Daten extrahieren von dort und schieben Sie es in das match_dict Wörterbuch, was wiederum würden Sie die Postdata direkt auf Ihrem Controller-Aktion Argumente füttern. Hier ist das Pylone Buchkapitel über die bedingten Funktionen in Routing Py, und hier ist eine ähnliche Frage hier auf SO und eine andere , die dazu beitragen sollten, wenn Sie wirklich an die Arbeit mit wsgi.input wollen direkt.

Doch anstatt eine dieser beiden Dinge, würde ich Ihre ursprüngliche Methode verwenden:

class UserController(BaseController):
    def create(self):
       name = request.POST['name']
       email = request.POST['email']
       password = request.POST['password']
       ...

Es ist definitiv möglich, die POST-Daten zu analysieren, bevor es zu einem Controller bekommt und auf sie zu ergreifen Maßnahmen, bevor dann. Doch bei POST-Daten suchen und zu entscheiden, was damit zu tun ist, eine Rolle des Controllers nicht Routes Rolle oder eine Middleware-Rolle. zum Beispiel - - Wenn Sie zu entscheiden, beginnen mit den POST-Daten in routing.py Hantieren, sind Sie einige der lose gekoppelten Vorteile von Pylonen und in geringerem Maße der ganzen WSGI shebang verlieren.

Sie wird sehen Pylonen-Controller, die aussehen wie diese, aber:

class UserController(BaseController):
    def create(self, name, spam):
       ...

Doch in diesen Fällen die Werte von „namen“ und „Spam“ stammen aus dem Query-String (und von Routes' Karte), nicht von den POST-Daten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top