首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Put请求python flask

Put请求python flask
EN

Stack Overflow用户
提问于 2018-03-04 15:39:42
回答 3查看 17.3K关注 0票数 0

我正在处理一个PUT请求,以便能够使用Flask和Python修改我的JSON文件中的数据。问题是它不会保存所做的更改。

下面是我的代码:

代码语言:javascript
复制
@app.route('/updated', methods = ['POST', 'PUT' 'GET'])
def update():
    try:
        title = request.form['title']
        print title

        if request.method == 'POST':
            with open("articles.json", 'r+') as json_File:
                articles = json.load(json_File)
                for article in articles['article']:
                    if title == article['title']:
                        print article['title']
                        print article['author']
                        print article['article_id']
                        article['title'] = title
                        article['author'] = request.form['author']
                        article['text'] = request.form['text']
                        article['article_id'] = request.form['article_id']
                        print article
                        save_article = json.dumps(article, json_File)
                    else:
                        print "article could not be added"
                #json_File.close()
                return render_template('updated.html', save_article = save_article, article = article)

    except:
        print "This didn't work."
        return render_template('errorHandler.html'), 404
EN

回答 3

Stack Overflow用户

发布于 2018-03-04 16:52:51

(http://blog.luisrei.com/articles/flaskrest.html)中的示例

代码语言:javascript
复制
@app.route('/echo', methods = ['GET', 'POST', 'PATCH', 'PUT', 'DELETE'])
def api_echo():
    if request.method == 'GET':
        return "ECHO: GET\n"

    elif request.method == 'POST':
        return "ECHO: POST\n"

    elif request.method == 'PATCH':
        return "ECHO: PACTH\n"

    elif request.method == 'PUT':
        return "ECHO: PUT\n"

    elif request.method == 'DELETE':
        return "ECHO: DELETE"

对于装饰器中的每个方法,最好都有一个if/elif/else,以防止出现奇怪的bug和边缘情况。

票数 2
EN

Stack Overflow用户

发布于 2018-03-04 16:12:45

我认为你应该改变这一部分:

代码语言:javascript
复制
if request.method == 'POST' or request.method == 'PUT':

为了获得更好的实践,我认为你应该这样做:

代码语言:javascript
复制
if request.method == 'POST' or request.method == 'PUT':
     # do your code here, which edit into your database
if request.method == 'GET':
     # do GET code here, which return data from your database

或者将https方法分成不同的函数。

票数 0
EN

Stack Overflow用户

发布于 2018-03-04 17:40:37

首先,json.dumps()将“转储”为字符串,而不是文件。所以

代码语言:javascript
复制
save_article = json.dumps(article, json_File)

将返回一个字符串,然后将其绑定到save_article变量,但文件并未实际修改。您可能打算使用json.dump(article, json_File),它接受一个文件作为第二个参数。

注意:文件参数在Python2中被默默忽略,我假设您正在使用它,因为它在Python3中会显示为错误。

可能还有其他问题。一种是文章将被附加到文件中,但代码的目的似乎是更新现有文章。就地更新文本文件通常是不切实际的。更好的方法是遍历文章,更新与标题匹配的文章。然后在最后重写整个文件一次。下面是一个例子:

代码语言:javascript
复制
        with open("articles.json", 'r') as json_File:
            articles = json.load(json_File)

        # update any matching articles
        for article in articles['article']:
            if title == article['title']:
                article['author'] = request.form['author']
                article['text'] = request.form['text']
                article['article_id'] = request.form['article_id']

        # rewrite the whole JSON file with updated dictionary
        with open("articles.json", 'w') as json_File:
            json.dump(articles, json_File)

在更新文章数据时,您可能需要考虑使用一个简单的数据库来管理它。你可以看看Flask SQLAlchemy

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49093115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档