2016-04-29 7 views
6

Ich habe folgenden CodeFehlende Formulardaten in Anfrage

class MyClass(restful.Resource): 

    def get(self): 
     headers = {'Content-Type': 'text/html'} 
     return make_response(render_template('myfile.html'),200,headers) 

    def post(self): 
      session['CONSUMER_KEY']=request.form.get('consumer_key') 
      session['CONSUMER_SECRET']=request.form.get('consumer_secret') 
      render_template('myfile.html') 

api.add_resource(MyClass,"/mag/",endpoint="mag") 

Ich habe folgenden Test geschrieben:

def mytest(self): 
     content_type={"Content-Type": "application/x - www - form - urlencoded","Content-Disposition": "form-data"} 
     response = self.client.post(
      api.url_for(MyClass), data = json.dumps({'consumer_key':'testconsumerkey', 
         'consumer_secret':'testconsumersecret'}), 
      headers=content_type 
     ) 

Das Problem ist, Formulardaten sind leer, und das ist, die Werte sind nicht in der Sitzung festgelegt zu werden. Wenn ich debugge, sehe ich, dass request.data ausgefüllt ist, aber request.form ist ein leeres Wörterbuch. Kann jemand vorschlagen, wie ich Formulardaten in einer Postanforderung von einem Test

senden kann

EDIT: Umgebungsdetails Python 2.7, Flaschenglasnetzrahmen, self.client ist. Ich verwende flask.ext.testing

+0

Können Sie einige Details zu Ihrer Umgebung hinzufügen? Es ist Flasche, richtig? Welcher Typ ist 'self.client' in deinem Test? –

+0

Python 2.7, Flask Web Framework, self.client ist Priyam

Antwort

4

Sie scheinen verwirrt zu sein, was das erwartete Format für den Postkörper sein sollte. Sollte es sich um JSON-Daten handeln (was Sie im Testfall senden) oder sollte es im Format application/x-www-form-urlencoded sein (was Sie im Testfall aussenden und was der Endpunkt lesen soll)?

Wenn Sie JSON-Daten empfangen möchten, müssen Sie den Endpunkt ändern, um die Daten von request.get_json() zu lesen. Sie müssen auch application/json als Content-Type-Header im Testfall verwenden.

Wenn Sie urlencodierte Postdaten erhalten möchten, dann vereinfachen Sie einfach den Testfall, indem Sie den Content-Type-Header und die entfernen. Übergeben Sie das Datendiktat einfach an das Argument data.

Verwandte Themen