Python Flacon de poste et de retourner des objets json
Excuses si cela semble rudimentaire comme je suis nouveau sur le Python. La tâche que je suis en train de complet est à envoyer un objet json à partir d'une application iPhone pour un script python qui permettra de traiter une bande de paiement. Le problème que j'ai c'est que je ne peut pas comprendre comment obtenir Python à reconnaître les entrants objet json pour en extraire des données et de la passer sur la Bande.
J'ai pris du recul, pour simplifier le problème. J'ai un script python qui tente d'afficher un objet json avec quatre paires de valeur à une autre fonction qui doit extraire les valeurs, créer un nouvel objet json et le retour de l'objet. Je ne peux pas l'obtenir pour fonctionner et que toute aide serait grandement apprécié que j'ai été coincé sur depuis un certain temps. Je suis à l'aide de Flacon:
`
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>"""
`
J'ai le retourné dans le journal des erreurs lorsque je l'exécute:
`
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'
`
OriginalL'auteur dickiebow | 2015-03-19
Vous devez vous connecter pour publier un commentaire.
Vous avez quelques problèmes avec le code. Tout d'abord, vous devez définir correctement le
json
de données lorsque vous en faites la demande à partir de larequests
de la bibliothèque. Vous pouvez le faire comme suit:Avis que nous appelons
json.dumps
au lieu de juste de transmettre les données directement. Sinon, la demande entrante n'est pas interprétée commejson
de données.Prochaine, dans votre fonction de réception, nous le changer comme suit:
Un couple de choses ont changé. Tout d'abord, nous avons lu dans les données en appelant
request.get_json()
, qui analyse les entrantsjson
de données. Remarque à partir de ci-dessus que nous avons dû changer la façon dont nous l'avons fait la demande pour pouvoir analyser les données correctement. La prochaine question est de savoir comment vous avez renvoyé les données. Pour bienjsonify
les données pour le retour, nous mettre les données dans un dictionnaire python plutôt que dans une chaîne de caractères.Si vous appelez votre fonction pour traiter de la bande de paiement à partir de quelque part d'autre (c'est à dire ne pas utiliser le python
requests
bibliothèque), un autre problème est que vous ne pouvez pas être la définition de lajson
demande correctement, Flacon à plus tard les interpréter. Si le problème persiste après avoir fait le changement ci-dessus pour le traitement de la fonction, de poste comment vous faites de lajson
demande d'ailleurs et je peux prendre un coup d'oeil.Laissez-moi savoir si cela résout votre problème!
Heureux d'entendre tout fonctionne maintenant!
Merci.. il m'a aidé à travailler avec JSON trop
OriginalL'auteur Jason Brooks
Vous devriez vérifier le document Flacon de demandes
Il ne définit pas un corps, au lieu de cela, vous devriez essayer avec
Vous suffit de vous assurer que vous êtes en spécifiant le bon type mime qui serait "application/json".
Voir
demande.get_json()
méthode pour plus d'infoOriginalL'auteur Zyber