Question

J'utilise WSGI et j'essaie d'accéder aux données get / post en utilisant ce code:

import os
import cgi
from traceback import format_exception
from sys import exc_info

def application(environ, start_response):

    try:
        f = cgi.FieldStorage(fp=os.environ['wsgi.input'], environ=os.environ)
        output = 'Test: %s' % f['test'].value
    except:
        output = ''.join(format_exception(*exc_info()))

    status = '200 OK'
    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

Cependant, le message d'erreur suivant s'affiche:

Traceback (most recent call last):
  File "/srv/www/vm/custom/gettest.wsgi", line 9, in application
    f = cgi.FieldStorage(fp=os.environ['wsgi.input'], environ=os.environ)
  File "/usr/lib64/python2.4/UserDict.py", line 17, in __getitem__
    def __getitem__(self, key): return self.data[key]
KeyError: 'wsgi.input'

Est-ce parce que wsgi.input n'existe pas dans ma version?

Était-ce utile?

La solution

Vous utilisez mal l’ API WSGI .

Veuillez créer une fonction minimale ("hello world") indiquant cette erreur afin que nous puissions commenter votre code. [Ne postez pas l'intégralité de votre candidature, elle risque d'être trop volumineuse et trop lourde pour que nous puissions faire des commentaires.]

Le os.environ n'est pas ce que vous devriez utiliser. WSGI remplace ceci par un environnement enrichi. Une application WSGI obtient deux arguments: l'un est un dictionnaire qui inclut 'wsgi.input' .

Dans votre code ...

def application(environ, start_response):

    try:
        f = cgi.FieldStorage(fp=os.environ['wsgi.input'], environ=os.environ)

Selon les spécifications de l'API WSGI ( http: //www.python .org / dev / peps / pep-0333 / # détails-de-spécifications ), n'utilisez pas os.environ . Utilisez environ , le premier paramètre de position de votre application.

  

Le paramètre environ est un dictionnaire   objet, contenant le style CGI   Variables d'environnement. Cet objet   doit être un dictionnaire Python intégré   (pas une sous-classe, UserDict ou autre   dictionnaire émulation), et le   l'application est autorisée à modifier le   dictionnaire de quelque façon qu'il désire. le   dictionnaire doit également inclure certains   Variables requises par WSGI (décrites dans   une section ultérieure), et peut également inclure   variables d'extension spécifiques au serveur,   nommé selon une convention qui   sera décrit ci-dessous.

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