Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 59 lines (39 sloc) 4.33 kb
700a353 Add french translation
nux authored
1 ---
2 layout: default
3 title: web.ctx
4 ---
5
6 # web.ctx
7
8 Autre langages: [english](/../ctx) | ...
9
10 Probleme
11 -------
12
13 Vous souhaitez utiliser des variables contextuelles dans votre code comme la page référante ou le navigateur du client.
14
15
16 Solution
17 --------
18
19 C'est possible en utilisant 'web.ctx'. D'abord un peu d'architecture: 'web.ctx' est basée sur la classe 'threadeddict', alias 'ThreadedDict'. Cette classe crée un objet de type dictionnaire qui possède des attributs spécifiques au processus id de thread. C'est élégant dans la mesure ou cela nous permet d'utiliser un objet de type dictionnaire, tandis que beaucoup d'utilisateurs accèdent au système simultanément, et l'objet ne contiendra que les données de la requête HTTP donnée. (aucune données n'est partagée donc l'objet est ["thread-safe"](http://fr.wikipedia.org/wiki/Threadsafe) -- _On dit qu’un programme ou qu'une portion de code est thread-safe s’il fonctionne correctement durant une exécution simultanée par plusieurs threads (processus légers)_.)
20
21
22 'web.ctx' contient des variables pour chaque requête qui comprennent des informations spécifiques pour chaque demande, comme les variables environnement du client. En supposant que vous vouliez déterminer quelle était la page référante d'un utilisateur accédant à une page:
23
24 Exemple
25 -------
26
27 class example:
28 def GET(self):
29 referer = web.ctx.env.get('HTTP_REFERER', 'http://google.com')
30 raise web.seeother(referer)
31
32
33 Ce code utilise 'web.ctx.env' pour accéder à l'environnement variables 'HTTP_REFERER'. Si il n'y en a pas, ce sera par défaut google.com. Enfin, il redirige l'utilisateur vers la page d'où il vient.
34
35
36 'web.ctx' est aussi très pratique car il peut-être rêglé par un ['loadhook'] (../application_processors/fr). Les données session, par exemple, sont fixées chaque fois qu'une demande est traitée et les données sont stockées dans 'web.ctx'. Depuis que 'web.ctx' est ["thread-safe"](http://fr.wikipedia.org/wiki/Threadsafe), vous pouvez utiliser les données session comme si elles étaient un objet régulier python.
37
38
39 Données que l'on trouve dans 'ctx'
40 -------------------
41
42 ### Request ###
43 * `environ` alias 'env' – un dictionnaire contenant les variables environnement standard de [WSGI](http://www.python.org/dev/peps/pep-0333/#environ-variables)
44 * `home` – le chemin de base pour l'application, y compris tout élément «consommée» par les applications extérieures *http://example.org/admin*
45 * `homedomain` – ? (semble être le protocole + l'hôte) *http://example.org*
46 * `homepath` – La partie du chemin requise par l'utilisateur, déduite de l'application courante. C'est à dire homepath + path = le chemin actuellement requis en HTTP par l'utilisateur. Exemple: */admin*
47
48 * `host` – le nom d'hôte (domaine) et (si ce n'est pas celui par défaut) le port requis par l'utilisateur. Exemple: *example.org*, *example.org:8080*
49 * `ip` – L'adresse ip de l'utilisateur. exemple: *xxx.xxx.xxx.xxx*
50 * `method` – la méthode HTTP utilisée. exemple: *GET*
51 * `path` – Le chemin demandé par l'utilisateur, relatif à l'aaplication en cours. Si vous utilisez des sous-applications, chaque partie de l'url filtrée par l'application externe sera déduite. Par exemple: vous avez une application principale dans code.py, et une sous application appelée 'admin.py'. Dans 'code.py', vous pointez '/admin' vers 'admin.app'. Dans 'admin.py', vous pointez '/stories' sur une classe nommée 'stories'. Au sein de 'stories', 'web.ctx.path' sera '/stories' et pas '/admin/stories'. Exemple: */articles/845*
52 * `protocol` – Le protocole utilisé. Exemple: *https*
53 * `query` – Une chaîne vide s'il n'y a pas d'argument de requête autre que '?' suivit par la chaine de requête. Exemple *?fourlegs=good&twolegs=bad*
54 * `fullpath` alias 'path + query' – Le chemin demandé inclut les arguments de requête mais n'inclut *pas* 'homepath'. Exemple : */articles/845?fourlegs=good&twolegs=bad*
55
56 ### Response ###
57 * `status` – Le code statut HTTP (par defaut '200 OK') *401 Unauthorized*
58 * `headers` – Une liste de deux tuples contenant les en-têtes HTTP (headers)
59 * `output` – Une chaîne contenant l'entité de réponse
Something went wrong with that request. Please try again.