Python请求。get_json()键错误

2024-04-19 18:13:44 发布

您现在位置:Python中文网/ 问答频道 /正文

这件事我绞尽脑汁已经一个小时了,没有任何解决办法。 我试图将AJAX post方法作为课程的一部分,我甚至尝试过一点一点地复制讲师代码,但每次都会遇到相同的错误

我的Python3代码:

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from flask import request, jsonify


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres://postgres:1999@localhost:5432/crud'
db = SQLAlchemy(app)


class Todo(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    description = db.Column(db.String(), nullable=False)

    def __repr__(self):
        return f'<Todo {self.id}{self.description}>'


db.create_all()




@app.route('/create', methods=['POST'])
def create_todo():
    description = request.get_json()['description']
    todo = Todo(description=description)
    db.session.add(todo)
    db.session.commit()
    return jsonify({
        'description': todo.description
    })


@app.route('/')
def index():
    return render_template("index.html", data=Todo.query.all())

我的HTML代码:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .hidden { display: none; } </style> </head> <body> <form id="form"> <input type="text" id="description" name="description"/> <input type="submit" value="Create"> </form> <div id="error" class="hidden">Something went wrong!</div> <ul id="todo"> {% for item in data %} <li>{{item.description}}</li> {% endfor %} </ul> <script> let desc =document.getElementById('description').Value; document.getElementById('form').onsubmit = function(e){ e.preventDefault(); fetch('/create',{ method: 'POST', body: JSON.stringify({ 'description': desc }), headers: { 'content-type': 'application/json' } }) .then(function(response){ return response.json(); }) .then(function (jsonresponse){ console.log(jsonresponse); const item = document.createElement('Li'); item.innerHTML = jsonresponse['description']; document.getElementById('todo').appendChild(item); document.getElementById('error').className ='hidden'; }) .catch(function (){ document.getElementById('error').className =''; }) } </script> </body> </html>

我在VS代码中遇到的错误:

[2021-02-09 11:08:56,508] ERROR in app: Exception on /create [POST]
Traceback (most recent call last):
  File "c:\python39\lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "c:\python39\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "c:\python39\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "c:\python39\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "c:\python39\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "c:\python39\lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\AmrFa\Desktop\Courses\CRUD\app.py", line 24, in create_todo
    description = request.get_json()['description']
KeyError: 'description'
127.0.0.1 - - [09/Feb/2021 11:08:56] "POST /create HTTP/1.1" 500 -

我不知道该怎么办,也不知道该往哪里走,我被困在这个问题上了


Tags: inpyselfidappflaskdbrequest