繁体   English   中英

无法解决 500(内部服务器错误)代码

[英]Cannot Resolve a 500 (Internal Server Error) Code

我遇到了一个 500 错误,我在练习制作具有各种列表的待办事项应用程序时无法解决,并且这些待办事项都具有完整的 CRUD 选项。

待办事项代码:

class TodoList (db.Model):
    __tablename__ = 'todolists'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(), nullable=False)
    todos = db.relationship('Todo', backref='list', lazy=True)

const todo_list_input = document.getElementById('todo_list_id');
            document.getElementById('create_list_box_button').onsubmit = function(e) {
                e.preventDefault();
                const list_title = todo_list_input.value;
                todo_list_input.value = '';
                fetch('/todolists/create', {
                    method: 'POST',
                    body: JSON.stringify({
                        'todo_list_id': list_title,
                    }),
                    headers: {
                        'Contet-Type': 'application/json'
                    }
                })
                .then(response => response.json())
                .then(jsonResponse => {
                    const li = document.createElement('li');
                    const checkbox = document.createElement('input');
                    checkbox.className = 'check-completed';
                    checkbox.type = 'checkbox';
                    checkbox.setAttribute('data-id', jsonResponse.id);
                    li.appendChild(checkbox);

                    const text = document.createTextNode(' ' + jsonResponse.description);
                    li.appendChild(text);

                    const deleteButton = document.createElement('button');
                    deleteButton.className = 'delete-button';
                    deleteButton.setAttribute('data-id', jsonResponse.id);
                    deleteButton.innerHTML = '✗';
                    li.appendChild(deleteButton);

                    document.getElementById('todo_lists_buttons').appendChild(li);
                    document.getElementById('error').className = 'hidden';

                })
                .catch(function() {
                    console.error('Error occurred');
                    document.getElementById('error').className = '';
                })
            }


@app.route('/todolists/create', methods=['POST'])
def create_todoList():
    error = False
    body = {}
    try:
        list_name = request.json()['list_name']
        todoList = List(list_name=list_name)
        db.session.add(todoList)
        db.session.commit()
        body['list_name'] = todoList.list_name
    except:
        error = True
        db.session.rollback()
        print(sys.exc_info())
    finally:
        db.session.close()
    if not error:
        return jsonify(body)
    else:
        abort(500)

我已经尝试在整个过程中更改变量名称,那里没有任何乐趣,以及其他一些试图查明问题的事情,并且对可能发生的事情没有想法(在这方面仍然是新的)。

这仅在尝试“创建”新的待办事项列表时发生。 我可以在列表之间交换并创建/删除待办事项没问题,只是创建列表不起作用。

待办事项代码:

class Todo(db.Model):
    __tablename__ = 'todos'
    id = db.Column(db.Integer, primary_key=True)
    description = db.Column(db.String(), nullable=False)
    completed = db.Column(db.Boolean, default=False)
    list_id = db.Column(db.Integer, db.ForeignKey('todolists.id'), nullable=False)

const todo_item_input = document.getElementById('description');
            document.getElementById('create_todo_box_button').onsubmit = function(e) {
                e.preventDefault();
                const desc = todo_item_input.value;
                todo_item_input.value = '';
                fetch('/todos/create', {
                    method: 'POST',
                    body: JSON.stringify({
                        'description': desc,
                        'list_id': {{ active_list.id }}
                    }),
                    headers: {
                        'Content-Type': 'application/json'
                    }
                })
                .then(response => response.json())
                .then(jsonResponse => {
                    const li = document.createElement('li');
                    const checkbox = document.createElement('input');
                    checkbox.className = 'check-completed';
                    checkbox.type = 'checkbox';
                    checkbox.setAttribute('data-id', jsonResponse.id);
                    li.appendChild(checkbox);

                    const text = document.createTextNode(' ' + jsonResponse.description);
                    li.appendChild(text);

                    const deleteButton = document.createElement('button');
                    deleteButton.className = 'delete-button';
                    deleteButton.setAttribute('data-id', jsonResponse.id);
                    deleteButton.innerHTML = '✗';

                    li.appendChild(deleteButton);

                    document.getElementById('todos').appendChild(li);

                    document.getElementById('error').className = 'hidden';
                })
                .catch(function() {
                    console.error('Error occured');
                    document.getElementById('error').className = '';
                })
            }

@app.route('/todos/create', methods=['POST'])
def create_todo():
    error = False
    body = {}
    try:
        description = request.get_json()['description']
        list_id = request.get_json()['list_id']
        todo = Todo(description=description)
        active_list = TodoList.query.get(list_id)
        todo.list = active_list
        db.session.add(todo)
        db.session.commit()
        body['description'] = todo.description
    except:
        error = True
        db.session.rollback()
        print(sys.exc_info())
    finally:
        db.session.close()
    if not error:
        return jsonify(body)
    else:
        abort(500)

Web 应用程序视图错误

我会尝试在您的代码中添加更详细的异常。 另外,我认为您可以在 try...accept 中进行error检查

@app.route('/todos/create', methods=['POST'])
def create_todo():
    body = {}
    try:
        description = request.get_json()['description']
        list_id = request.get_json()['list_id']
        todo = Todo(description=description)
        active_list = TodoList.query.get(list_id)
        todo.list = active_list
        db.session.add(todo)
        db.session.commit()
        body['description'] = todo.description
        return jsonify(body)
    except Exception as e:
        print(e)                  # ------- tracing
        db.session.rollback()
        print(sys.exc_info())
    finally:
        db.session.close()

    abort(500)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM