Question

J'utilise pylones, et mon action de contrôleur est:

 class UserController(BaseController):

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

Mais je trouve dans Turbogears, je peux le faire comme ceci:

 class UserController:

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

Comment faire la même chose dans Pylônes?


UPDATE

Je l'ai recherché dans Google, et a demandé dans d'autres forums, mais toujours pas la réponse. Personne ne sait (ou intéressés) une telle question?

Était-ce utile?

La solution

On dirait que vous voulez donner des arguments à la méthode create() de votre contrôleur qui dérivent directement des éléments des données POST. Vous pouvez le faire, mais il est plutôt délicat.

Le chemin le plus court pour le faire - de façon fragile -. Serait de définir simplement l'action comme si, en utilisant les variables d'environnement comme valeurs par défaut pour l'action

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

La chose est que, même si elle peut paraître lourde, la première méthode est probablement montré une meilleure façon de le faire, car il vous donne plus de place pour récupérer gracieusement de ces variables ne sont pas ce que vous attendez d'être.

Si vous avez envie de vraiment Checklist, vous pouvez pousser cette logique dans routing.py. Les données POST est déjà là, mais pas aussi directement, parce que la logique comme celui-ci appartient à votre contrôleur. Vous utilisez un conditionnelle méthode Itinéraires , qui vous donne accès à environ[wsgi.input] , qui a les données POST, puis extraire vos données souhaitées à partir de là , et le pousser dans le dictionnaire match_dict, qui à son tour vous permettre de nourrir les POSTDATA directement aux arguments de votre action du contrôleur. Voici la section livre Pylônes sur les fonctions conditionnelles dans le routage py, et est ici un question similaire ici sur le SO et une autre , qui devrait vous aider si vous voulez vraiment travailler avec wsgi.input directement.

Cependant, au lieu de l'une de ces choses, j'utiliser votre méthode originale:

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

Il est certainement possible d'analyser les données POST avant qu'il arrive à votre contrôleur et de prendre des mesures à ce sujet avant. Cependant, on examine les données POST et de décider quoi faire avec elle est un rôle de contrôleur, pas le rôle Routes ou un rôle de middleware. Si vous décidez de - par exemple - commencer à jongler avec les données POST dans routing.py, vous perdre quelques-uns des avantages faiblement couplés de Pylônes et, dans une moindre mesure tout le tralala WSGI.

voir les contrôleurs Pylônes qui ressemblent à ceci, cependant:

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

Cependant, dans ces cas, les valeurs de « nom » et « spam » viennent de la chaîne de requête (et de la carte de Routes), et non à partir des données POST.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top