我请求的表单是否正确保存为JSON API?

时间:2017-08-16 19:09:58

标签: python json api

我正在使用Flask,Python 2.7和REST请求创建一个JSON API(保存在JSON文件中) 我的问题是我只能访问JSON文件中保存的所有数据。我希望能够只从数组中看到一个对象(当我想编辑数据时,对于PUT请求),数据['title'],我现在不能正常工作。这让我觉得也许我没有正确保存所要求的表格? 当我用帖子保存数据时,不知道哪里不对?或者如果还有其他问题? 感谢所有帮助!

    @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

1 个答案:

答案 0 :(得分:0)

您的代码的问题来自于将return语句放在第一个代码块中的位置。当您执行返回时,它会立即结束您所在的方法,无论它是否处于循环中。你可能想尝试这样的事情:

@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

这将以jsonified对象列表的形式呈现给你,我假设这是你原本想要做的事情。