UPDATE table_name
SET comlumn1 = value1
WHERE condition;
user = User.query.get(some_id)
user.name = 'Some new name'
db.session.commit()
d.completed
가 True
이면 checked이고 False
이면 아무것도 발생하지 않는다.data-id
라는 data attribute를 만들어 jinja를 통해 id값을 가져온다. (data-
뒤에 붙는 이름으로 딕셔너리가 생성된다. ex. {'id': 12} index.html
Update - Send Request...
const checkboxes = document.querySelectorAll('.check-completed');
for (let i = 0; i < checkboxes.length; i++){ # 1
const checkbox = checkbox[i];
checkbox.onchange = function(e) { # 2
console.log('event', e);
const newCompleted = e.target.checked; # 3
const todoId = e.target.dataset['id']; # 4
fetch('/todos/' + todoId + 'set-completed', { # 5
method: 'POST',
body: JSON.stringify({
'completed': newCompleted
}),
headers: {
'Content-Type`: 'application/json'
}
})
.then(function() {
document.getElementById('error').className = 'hidden';
})
.catch(function() {
document.getElementById('error').className = '';
})
}
}
...
newCompleted
라는 변수에 저장한다.@app.route('/todos/<todo_id>/set-completed', methods=['POST']) # 1
def set_completed_todo(todo_id):
try:
completed = reguest.get_json()['completed']
todo = Todo.query.get(todo_id)
todo.completed = completed # 2
db.session.commit()
except:
db.session.rollback()
finally:
db.session.close()
return redirect(url_for('index')) # 3
<>
안에 파라메터를 넣으면 메소드 내에서 바로 argument로 사용이 가능해진다.아이템들을 체크 한 후 새로고침을 눌러보면 아이템들의 정렬이 변하는 것을 볼 수 있다.
이것을 해결하기 위해 id
를 이용하여 추가된 순으로 정렬해본다.
@app.route('/')
def index():
return render_template('index.html', data = Todo.query.order_by('id').all())