2017-08-16 1 views
0

Ich erstelle eine JSON-API (in einer JSON-Datei gespeichert) mit Flask, Python 2.7 und REST-Anforderungen.
Mein Problem ist, dass ich nur auf alle Daten zugreifen kann, die in einer JSON-Datei gespeichert sind. Ich möchte in der Lage sein, nur ein Objekt aus dem Array zu sehen (Wenn ich die Daten für eine PUT-Anfrage bearbeiten möchte), mit Daten ['title'], die ich gerade nicht arbeite. Was bringt mich dazu zu denken, dass ich das angeforderte Formular vielleicht nicht korrekt speichere? Irgendeine Idee, wo es nicht richtig ist, wenn ich die Daten mit Post speichern? Oder wenn es ein anderes Problem gibt? Schätzen Sie alle Hilfe!Wird das angeforderte Formular korrekt in einer JSON-API gespeichert?

@app.route('/articleAdded', methods = ['POST']) 
def added(): 
    '''Adds new articles''' 
    if request.method == 'POST': 
     title = request.form['title'] 
     author = request.form['author'] 
     text = request.form['text'] 

     article = {'title' : title, 'author' : author, 'text' : text} 
     articles.append(article) 

     try: 
      with open("articles.json", "w") as json_File: 
       new_art = json.dump(articles, json_File, sort_keys=True, indent=4) 
       json_File.close() 
      return render_template('articleAdded.html', title = title, author = author, text = text) 
     except: 
      return render_template('errorHandler.html'), 404 

    @app.route('/edit/<string:title>', methods=['GET']) 
    def edit(title): 
     '''shows specific aticle''' 
     try: 
      with open("articles.json", 'r') as article_file: 
       data = json.load(article_file) 
       print data['title'] 
       if title == data['title'] : 
        print "hello" 
        return render_template('editArticle.html', data = data, title = title) 
       else: 
        print "Something went wrong!" 
       data.close() 
     except: 
      return render_template('errorHandler.html'), 404 
+0

Können Sie Ihr Programm ausführen und uns sagen, was Sie für die print-Anweisungen erhalten oder nicht einmal kompilieren? Ein schnelles Problem, das ich sehe, ist, dass Sie in der ersten Methode etwas an die Variable "articles" anhängen, die nie deklariert wurde. – JoshKopen

+0

Artikel ist eine globale Liste. Der obige Code zeigt nicht meinen gesamten Code. Es läuft ohne Fehler. Das Problem ist jedoch, dass wenn ich meine JSON-Datei mit der GET-Anfrage öffne, ich nur das gesamte Objekt drucken kann. Wenn ich also drei Artikel hinzugefügt habe, werden alle diese Artikel gedruckt. Ich möchte nur einen dieser drei Artikel drucken können. Was ich denke, Sie sollten in der Lage sein, nur durch das Schreiben von Daten ["Titel"] (wenn ich den Titel will). Aber das funktioniert nicht, also dachte ich, es könnte ein Problem damit geben, wie ich die Artikel hinzufüge? –

Antwort

0

Das Problem mit Ihrem Code kommt von wo Sie die Rückgabeanweisung in Ihrem ersten Codeblock platzieren. Wenn Sie eine Rückgabe durchführen, wird die Methode, in der Sie sich befinden, sofort beendet, unabhängig davon, ob sie sich in einer Schleife befindet oder nicht. Sie können so etwas wie dieses, anstatt versuchen:

@app.route('/api/articles', methods=['GET']) 
def show_articles(): 
    '''Opens dictionary and returns all users as json format''' 
    try: 
     with open('articles.json') as open_file: 
      json_ret = [jsonify({'article': article}) for article in open_file] 
      return json_ret 
    except: 
     return render_template('errorHandler.html'), 404 

Dies wird es Ihnen geben in Form einer Liste von jsonified Objekte, die ich angenommen habe, ist, was Sie ursprünglich vorhatten.

+0

Danke für die schnelle Antwort! Habe gesehen, dass ich den falschen Code hochgeladen habe, wollte die Postanfrage anzeigen. Es tut uns leid! Aber danke, dass du meinen Fehler entdeckt hast. :) Hast du eine Idee, warum ich nicht nur ein Objekt und nur die ganze Liste sehen kann? –

+0

Alles gut, werde versuchen, dies auch herauszufinden. – JoshKopen

Verwandte Themen