Question

Je construis une application en utilisant le framework web2py ... Je ne veux pas avoir à utiliser l'objet de demande pour obtenir tous les paramètres de requête, mais j'aimerais plutôt construire mon contrôleur avec des paramètres nommés et faire déballer le routeur la requête (ou formulaire Données) Dictionnaire dans les paramètres nommés et appelez mon contrôleur.

Donc, au lieu d'une méthode de contrôleur de

create_user():

où j'utiliserais l'objet Global Request () et examinerais la liste VARS ... Je préférerais plutôt avoir

create_user(first_name, last_name, email):

Comme je le vois dans d'autres plates-formes MVC.

Est-ce déjà possible dans web2py? Ou y a-t-il un plugin pour cela? Ou dois-je l'ajouter moi-même?

Était-ce utile?

La solution

Non. Comme indiqué dans le livre, une URL de la forme

http://127.0.0.1:8000/a/c/f.html/x/y/z?p=1&q=2

cartes vers l'application (dossier) a, contrôleur (fichier) c.py, fonction f, et les arguments supplémentaires doivent être déballés de l'objet de demande comme

x, y, z = tuple(request.args)
p = request.vars['p'] # p=1
q = request.vars['q'] # q=2 

De plus, Web2Py détecte spécifiquement les fonctions de contrôleur valides comme les fonctions qui n'ont aucun argument. AFAICR, c'est opposé à Django qui détecte le contrôleur valide fonctionne comme ceux qui ont au moins un argument.

Autres conseils

je le fais

def create_user():
    try:
        first_name, last_name, email = request.args[:3]
    except:
        redirect('some_error_page')

Mais pensez que First_name, Last_name et Email peuvent contenir des caractères qui ne sont pas autorisés dans le path_info (web2py en pointilleux lors de la validation que seul [ w - .] sont autorisés).

Il existe une circonstance dans laquelle les contrôleurs web2py peuvent utiliser des paramètres. Lorsqu'une fonction de contrôleur a le décorateur @Service, les paramètres peuvent être utilisés, selon le type de service, par exemple:

@service.jsonrpc
def somefunction(a=None, b='default'):
    ## whatever

Cette approche est pour quand une fonction de contrôleur est vraiment une API, pas un moyen de générer une vue Web. Il y a de belles choses que vous pouvez faire en termes de définition de fonctions de vue Web et de style API en parallèle, et le fait que les vues Web appellent les fonctions de l'API, pour vous assurer d'avoir une bonne séparation des vues et des contrôleurs.

Selon la façon dont vous choisissez de diviser les responsabilités entre le client Web / JavaScript, la vue web2py et le contrôleur web2py, il peut être logique d'avoir des fonctions de contrôleur qui sont vraiment des API (avec des paramètres facultatifs) plutôt que de construire la logique d'engagement des paramètres dans un contrôleur de style de vue Web.

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