2010-11-09 5 views
2

Je ne peux pas m'empêcher de penser qu'il s'agit d'un doublon, mais si c'est le cas, je n'arrive pas à trouver le doppelganger. Je commence juste à apprendre Python (en me concentrant sur les Pylônes) et je voudrais savoir s'il existe un moyen de déterminer si un appel à un contrôleur est fait de manière asynchrone ou non. En PHP, il ressemblerait à quelque chose comme ceci:Comment déterminer si une requête HTTP est asynchrone en Python ou Pylons

function isAjax() { 
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'; 
} 

Y at-il un qui fonctionne bien pour tous Python, ou est-il peut-être un qui fonctionne très bien que dans Pylônes?

Merci d'avance!

Répondre

4

Pour traduire ce code directement à python en utilisant vous Pylônes faire quelque chose le long des lignes de:

def isAjax(request): 
    return request.environ.get('HTTP_X_REQUEST_WITH') == 'XMLHttpRequest' 

où la demande est l'objet de requête transmis au contrôleur.

+0

@Keegan - Impressionnant! La raison pour laquelle j'ai soulevé cette question est parce que je lisais juste [cette section] (http://pylonsbook.com/fr/1.1/explorer-pylons.html#request) dans le livre Pylons et j'ai remarqué à quel point les variables d'environnement sont similaires . Je n'ai pas immédiatement accès à un serveur exécutant Python où je peux tester ceci, donc dès que vous ou quelqu'un d'autre le confirme, j'accepterai volontiers votre bonne réponse :-) – treeface

+1

@treeface il a raison ... Voilà comment vous le ferais. D'ailleurs, la similarité que vous voyez est due au fait que l'objet request.environ est le même pour tous les frameworks web python basés sur wsgi. Par quoi je veux dire à peu près tous les frameworks de web.py à pylons. Tout est décrit dans python PEP 0333 (http://www.python.org/dev/peps/pep-0333/) si vous voulez le chercher, c'est une lecture intéressante. – Joshkunz

+0

Donc pour la réponse courte: oui, la méthode décrite par @Keegan fonctionnera avec n'importe quel framework basé sur wsgi. – Joshkunz

1

Coller soutient cette méthode:

request.is_xhr 

Il est mis en œuvre:

return self.environ.get('HTTP_X_REQUESTED_WITH', '') == 'XMLHttpRequest' 
Questions connexes