新增紀錄
新增紀錄的內容的結構會對應 model.py 中的構造函數,在上一篇構造函數中有 content 、 created_at 兩個,但只需要輸入紀錄的內容,創建時間則直接使用 datetime 來自動輸入,最後使用 add() 新增紀錄,這裡使用 POST 來傳輸表單內容。可以參考 flask-sqlalchemy 文件。
@app_api.route('/todo', methods=['POST'])
def create():
content = request.form['content']
lists = List(content, datetime.datetime.now())
db.session.add(lists)
db.session.commit()
return 'create success'
在 POSTMAN 輸入 http://127.0.0.1:5000/api/todo_item ,method 選擇 POST ,然後選 Body 的 from-data ,接著輸入 KEY 的名稱為 content 以及 VALUE 的內容,按下 Send 能看到返回 create success 的訊息就代表已經成功的新增一條紀錄了。接著可以自行試試看查詢紀錄看輸出的結果。
更新紀錄
更新紀錄時先查詢後,找到要更改紀錄的 id 在做更新。我們有兩種方法來更新紀錄。第一種使用 update() 來更新數據,第二種直接把值帶進去。
@app_api.route('/todo/<id>', methods=['PUT'])
def update(id):
new_content = request.form['content']
#使用update
List.query.filter(List.id == id).update(
dict(content=new_content,updata_at=datetime.datetime.now()))
''' #直接帶值
lists = List.query.get(id)
lists.content = new_content
lists.updata_at = datetime.datetime.now()
'''
db.session.commit()
return 'update success'
在 POSTMAN 輸入 http://127.0.0.1:5000/api/todo/id ,method 選擇 PUT,然後選 Body 的 from-data ,接著輸入 KEY 的名稱為 content 以及 VALUE 的內容,按下 Send 能看到返 update success 的訊息就代表已經成功的更新該筆紀錄了。接著可以自行試試看查詢紀錄看輸出的結果。
刪除紀錄
刪除紀錄時也是先查詢後,找到要刪除紀錄的 id 在做刪除。這裡製作了兩種刪除:邏輯刪除、物理刪除。邏輯刪除我們用資料庫欄位 deleted_at 來判斷,物理刪除則使用 delete() 直接刪除。
先使用物理刪除來操作,直接刪除。
@app_api.route('/todo/<id>', methods=['DELETE'])
def delete_physical(id):
lists = List.query.get(id)
db.session.delete(lists)
db.session.commit()
return 'delete success'
在 POSTMAN 輸入
http://127.0.0.1:5000/api/todo/id,method 選擇 DELETE,按下 Send 能看到返回 deletes uccess 的訊息就代表已經成功的刪除該筆紀錄了。接著可以自行試試看查詢紀錄看輸出的結果。
在使用邏輯刪除來操作,我們在刪除的時候給 deleted_at 欄位輸入刪除的時間,只要在查詢紀錄上多一個判斷 List.deleted_at== None 就不會顯示已刪除的該筆紀錄。這裡也有兩種方法可以實現。
@app_api.route('/todo/<id>', methods=['DELETE'])
def delete_logic(id):
List.query.filter(List.id == id).update(
dict(deleted_at=datetime.datetime.now()))
#lists = List.query.get(id)
#lists.deleted_at = datetime.datetime.now()
db.session.commit()
return 'delete success'
由於使用邏輯刪除,所以前面的查詢紀錄的程式碼都要稍微更改一下,在查詢判斷式裡面要增加 List.deleted_at== None 才能成功實現。
lists = List.query.filter(List.deleted_at == None).all()
本篇用 Flask_SQLAlchemy 跟 API 完成了簡單的 ListToDo 的增刪查改的操作,在有些功能上還是有著缺陷,但不影響基本的功能。希望能透過這次實作能幫助到讀者。