Python-Flask post und json-Objekten zurück
Entschuldigung, wenn dies scheint rudimental, wie ich bin neu in Python. Die Aufgabe, die ich versuche zu vervollständigen, ist das senden einer json-Objekt aus einer iPhone-app ein python-Skript, dass ein Prozess ein Streifen-Zahlung. Das problem was ich habe ist, ich kann nicht herausfinden, wie man Python zu erkennen, das eingehende json-Objekt zum extrahieren von Daten aus es und pass auf Streifen.
Habe ich ein Schritt zurück, zu vereinfachen das problem. Ich habe ein python-script, dass der Versuch der post ein json-Objekt mit vier Wert-Paare, um eine andere Funktion, sollten extrahieren der Werte, erstellen Sie eine neue json-Objekts und Rückgabe-Objekt. Ich kann es nicht, zu arbeiten und jede Hilfe wäre sehr geschätzt, wie ich bin stecken geblieben auf diese für eine Weile. Ich bin mit Kolben:
`
import json
import stripe
import smtplib
import requests
from flask import Flask, request, jsonify
@application.route('/run_post')
def run_post():
url = 'http://xxx.pythonanywhere.com/stripetest'
data = {'stripeAmount': '199', 'stripeCurrency': 'USD', 'stripeToken': '122', 'stripeDescription': 'Test post'}
headers = {'Content-Type' : 'application/json'}
r = requests.post(url, data, headers=headers)
#return json.dumps(r.json(), indent=4)
return r.text
@application.route('/stripetest', methods=["POST"])
def stripeTest():
if request.method == "POST":
json_dict = json.loads(request.body.raw)
stripeAmount = json_dict['stripeAmount']
stripeCurrency = json_dict['stripeCurrency']
stripeToken = json_dict['stripeToken']
stripeDescription = json_dict['stripeDescription']
data = "{'stripeAmountRet': " + stripeAmount + ", 'stripeCurrencyRet': " + stripeCurrency + ", 'stripeTokenRet': " + stripeToken + ", 'stripeDescriptionRet': " + stripeDescription + "}"
return jsonify(data)
else:
return """<html><body>
Something went horribly wrong
</body></html>"""
`
Bekomme ich die folgende kehrte in die error-log wenn ich dies ausführen:
`
2015-03-19 21:07:47,148 :Starting new HTTP connection (1): xxx.pythonanywhere.com
2015-03-19 21:07:47,151 :Exception on /stripetest [POST]
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1360, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1358, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1344, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/var/www/xxx_pythonanywhere_com_wsgi.py", line 156, in stripeTest
json_dict = json.loads(request.body.raw)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 336, in __getattr__
return getattr(self._get_current_object(), name)
AttributeError: 'Request' object has no attribute 'body'
`
InformationsquelleAutor dickiebow | 2015-03-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie ein paar Probleme mit dem code. Zunächst, Sie brauchen, um richtig zu definieren, die
json
Daten, wenn Sie die Anfrage aus derrequests
Bibliothek. Sie können dies tun, wie folgt:Beachten Sie, dass wir nennen
json.dumps
statt nur übergeben Sie die Daten direkt. Andernfalls, wird die eingehende Anforderung ist nicht so auszulegen, alsjson
Daten.Nächsten, in Ihrer Aufnahme-Funktion, ändern wir es wie folgt:
Ein paar Dinge geändert werden. Zunächst Lesen wir in den Daten durch aufrufen
request.get_json()
, die ordnungsgemäß analysiert die eingehendenjson
Daten. Hinweis von oben, dass wir brauchten, um zu ändern, wie wir tatsächlich die Aufforderung für Sie, um die Daten analysieren richtig. Die nächste Frage war, wie man die Daten zurückgegeben. Richtigjsonify
Daten zurückgeben, stellen wir die Daten in einem python-Wörterbuch, anstatt in einen string.Wenn Sie aufrufen der Funktion zum verarbeiten der Streifen Zahlung von woanders (also nicht mit Hilfe der python -
requests
Bibliothek), ein weiteres Problem ist, dass Sie möglicherweise nicht die Definition derjson
Anfrage richtig für die Kolben, um Sie später zu interpretieren. Wenn das Problem weiterhin besteht, nachdem die oben genannten änderung der Verarbeitung Funktion, post wie, du machst dasjson
Anfrage an anderer Stelle und ich kann schauen.Lassen Sie mich wissen, wenn dies behebt Ihre Probleme!
Froh zu hören, alles funktioniert jetzt!
Vielen Dank.. das hat mir geholfen, die Arbeit mit JSON zu
InformationsquelleAutor Jason Brooks
Sollten Sie das Dokument Kolben Anfragen
Es nicht definiert, ein Körper, stattdessen sollte man versuchen mit
Müssen Sie nur sicherstellen, dass Sie die Angabe der richtigen mimetype was wäre "application/json".
Sehen
- Anfrage.get_json()
Methode für mehr infoInformationsquelleAutor Zyber