Trong phần trước của loạt bài hướng dẫn này, chúng tôi đã triển khai chức năng cần thiết cho người dùng đã đăng nhập để thêm điều ước. Chúng tôi cũng đã biết cách hiển thị các mong muốn do người dùng nhập trên trang chủ của người dùng.
Trong phần này, chúng tôi sẽ triển khai chức năng chỉnh sửa và xóa các mong muốn do người dùng nhập.
Bắt đầu
Hãy bắt đầu bằng cách sao chép phần trước của hướng dẫn từ GitHub.
git clone https://github.com/jay3dec/PythonFlaskMySQLApp_Part3.git
Khi mã nguồn đã được nhân bản, hãy điều hướng đến thư mục dự án và khởi động máy chủ web.
cd PythonFlaskMySQLApp_Part3python app.py
Trỏ trình duyệt của bạn đến http:// localhost:5002 / và bạn sẽ có ứng dụng đang chạy.
Chỉnh sửa Danh sách mong muốn
Bước 1:Hiển thị Biểu tượng Chỉnh sửa
Chúng tôi đã liên kết dữ liệu nhận được bằng jQuery với HTML của chúng tôi. Chúng tôi sẽ sửa đổi mã đó và sử dụng các mẫu jQuery để giúp liên kết dữ liệu dễ dàng hơn. Chúng tôi cũng sẽ thêm một edit
vào HTML của chúng tôi để cung cấp một cách cập nhật điều ước. Mở userHome.html
và bao gồm tham chiếu đến các mẫu jQuery.
Xóa list-group
hiện có div và thay thế nó bằng mã HTML sau:
Bên trong UL
với lớp list-group
chúng tôi sẽ ràng buộc dữ liệu của chúng tôi. Xác định một listTemplate
như được hiển thị trong phần nội dung của HTML:
Sửa đổi jQuery
Gọi lại thành công AJAX để liên kết dữ liệu với listTemplate
.
Ngoài ra, hãy bao gồm một số kiểu trong userHome.html
:
Lưu tất cả các thay đổi và khởi động lại máy chủ. Trỏ trình duyệt của bạn tới http:// localhost:5002 và đăng nhập bằng địa chỉ email và mật khẩu hợp lệ. Sau khi đăng nhập, bạn sẽ có thể nhìn thấy mong muốn do người dùng tạo.
Bước 2:Hiển thị Cửa sổ bật lên Chỉnh sửa
Chúng tôi sẽ sử dụng Bootstrap để hiển thị cửa sổ bật lên nhằm cung cấp giao diện để chỉnh sửa mong muốn. Bao gồm tham chiếu đến Bootstrap trong userHome.html
.
Khi tham chiếu đã được đưa vào, hãy thêm HTML sau vào userHome.html
.
Cập nhật điều ước
HTML ở trên sẽ đóng vai trò là cửa sổ bật lên. Khi người dùng nhấp vào
edit
biểu tượng cửa sổ bật lên sẽ hiển thị. Chúng tôi đã thêm các thuộc tínhdata-target
vàdata-toggle
sẽ kích hoạt cửa sổ bật lên phương thức.Lưu các thay đổi trên và khởi động lại ứng dụng. Sau khi đăng nhập vào ứng dụng, hãy nhấp vào
edit
và bạn sẽ có thể xem cửa sổ bật lên.Bước 3:Điền vào Cửa sổ bật lên Chỉnh sửa
Khi người dùng nhấp vào biểu tượng chỉnh sửa, chúng tôi sẽ hiển thị cửa sổ bật lên cập nhật với
title
vàdescription
cập nhật. Để bắt đầu, trước tiên chúng ta cần ID điều ước để tìm nạp các chi tiết điều ước cụ thể sau khi người dùng nhấp vào biểu tượng chỉnh sửa. Vì vậy, hãy sửa đổi mã mẫu jQuery để bao gồm một thuộc tính bổ sungdata-id
trên phần tử neo chỉnh sửa.Chúng tôi cũng đã đính kèm một
onclick
sự kiện để gọi phương thứcEdit
. Bên trong chức năng Chỉnh sửa, chúng tôi sẽ thực hiện một cuộc gọi AJAX tới một phương thức python có tên làgetWishById
sẽ trả về chi tiết mong muốn.function Edit (elm) {$ .ajax ({url:'/ getWishById', data:{id:$ (elm) .attr ('data-id')}, type:'POST', success:function (res) {console.log (res);}, error:function (error) {console.log (error);}});}Tiếp theo, mở
app.py
và tạo một phương thức có tên làgetWishById
. Sử dụng phương pháp này, chúng tôi sẽ nhận được các chi tiết mong muốn cụ thể từ cơ sở dữ liệu.@ app.route ('/ getWishById', method =['POST']) def getWishById ():try:if session.get ('user'):_id =request.form ['id'] _user =session.get ('user') conn =mysql.connect () cursor =conn.cursor () cursor.callproc ('sp_GetWishById', (_ id, _user)) result =cursor.fetchall () wish =[] wish.append ({'Id':result [0] [0], 'Title':result [0] [1], 'Description':result [0] [2]}) return json.dumps (wish) else:return render_template ('error.html', error ='Truy cập trái phép') ngoại trừ Ngoại lệ là e:return render_template ('error.html', error =str (e))Như bạn có thể thấy trong phương pháp trên, chúng tôi đã chuyển ID mong muốn vào phương thức này và nó lấy dữ liệu từ cơ sở dữ liệu bằng cách sử dụng
user ID
vàwish ID
. Khi dữ liệu đã được tìm nạp, nó sẽ chuyển đổi dữ liệu đó thành một danh sách và sau đó trả về dưới dạngJSON
dữ liệu.Tiếp theo, hãy tạo thủ tục lưu trữ MySQL bắt buộc để tìm nạp dữ liệu từ cơ sở dữ liệu.
DELIMITER $$ CREATE DEFINER =`root` @` localhost` PROCEDURE `sp_GetWishById` (TRONG p_wish_id bigint, Trong p_user_id bigint) BEGINselect * từ tbl_wish trong đó wish_id =p_wish_id và wish_user_id =p_pre_id; ENDĐoạn mã được hiển thị ở trên là thủ tục được lưu trữ để nhận chi tiết điều ước cụ thể bằng cách sử dụng
wish ID
vàuser ID
.Lưu các thay đổi và khởi động lại máy chủ. Sau khi đăng nhập vào ứng dụng, hãy nhấp vào
edit
biểu tượng và bạn sẽ có thông tin chi tiết được đăng nhập trong bảng điều khiển trình duyệt của mình.Để liên kết dữ liệu đã nhận với cửa sổ bật lên HTML, trước tiên hãy xóa
data-target
vàdata-toggle
thuộc tính từ thẻ liên kết biểu tượng chỉnh sửa. Sau đó, thêm mã sau vàoEdit
Gọi lại thành công hàm JavaScript để điền cửa sổ bật lên và kích hoạt nó.// Phân tích cú pháp dữ liệu chuỗi JSON đã nhận =JSON.parse (res); // Điền vào cửa sổ bật lên $ ('# editTitle'). val (data [0] ['Title']); $ ('# editDescription '). val (data [0] [' Description ']); // Kích hoạt Pop Up $ (' # editModal '). modal ();Lưu các thay đổi và khởi động lại máy chủ. Sau khi đăng nhập vào ứng dụng, hãy thử nhấp vào biểu tượng chỉnh sửa và bạn sẽ có cửa sổ bật lên với tiêu đề và mô tả.
Bước 4:Cập nhật Chi tiết Điều ước
Để triển khai chức năng cập nhật, trước tiên hãy tạo một thủ tục được lưu trữ MySQL.
DELIMITER $$ CREATE DEFINER =`root` @` localhost` PROCEDURE `sp_updateWish` (IN p_title varchar (45), IN p_description varchar (1000), IN p_wish_id bigint, Trong p_user_id bigint) BEGINcập nhật tbl_wish set wish_title =p wish_description =p_description trong đó wish_id =p_wish_id và wish_user_id =p_user_id; HẾT $$ DELIMITER;Như đã thấy trong quy trình được lưu trữ ở trên, chúng tôi sẽ chuyển vào
title
đã sửa đổi vàdescription
cùng vớiID
mong muốn và người dùng cập nhật thông tin chi tiết trong cơ sở dữ liệu.Tiếp theo, hãy tạo một phương thức mới có tên là
updateWish
để cập nhật thông tin chi tiết. Đây làupdateWish
phương pháp:@ app.route ('/ updateWish', method =['POST']) def updateWish ():try:if session.get ('user'):_user =session.get ('user') _title =request.form ['title'] _description =request.form ['description'] _wish_id =request.form ['id'] conn =mysql.connect () cursor =conn.cursor () cursor.callproc ('sp_updateWish', (_title, _description, _wish_id, _user)) data =cursor.fetchall () if len (data) là 0:conn.commit () return json.dumps ({'status':'OK'}) else:return json. kết xuất ({'status':'ERROR'}) ngoại trừ Ngoại lệ là e:return json.dumps ({'status':'Truy cập trái phép'}) cuối cùng là:cursor.close () conn.close ()Như đã thấy trong đoạn mã trên, sau khi xác thực phiên hợp lệ, chúng tôi đã thu thập dữ liệu đã đăng và gọi thủ tục được lưu trữ
sp_updateWish
để cập nhật thông tin chi tiết.Để gọi
updateWish
, chúng tôi cần đính kèm một sự kiện trênUpdate
bấm vào nút. Vì vậy, hãy đặt tên cho nút cập nhật làbtnUpdate
và đính kèmonclick
sự kiện như hình:$ ('# btnUpdate'). click (function () {$ .ajax ({url:'/ updateWish', data:{title:$ ('# editTitle'). val (), description:$ ( '#editDescription'). val (), id:localStorage.getItem ('editId')}, gõ:'POST', thành công:function (res) {$ ('# editModal'). modal ('hide'); // Điền lại lưới}, error:function (error) {console.log (error);}})});Như đã thấy trong đoạn mã trên, chúng tôi đã thu thập
editId
từlocalStorage
, vì vậy bên trongEdit
hàm lưuID
vàolocalStorage
.localStorage.setItem ('editId', $ (elm) .attr ('data-id'));Kết thúc
getWish
Lệnh gọi AJAX vào một hàm để chúng tôi có thể gọi lại hàm đó sau khi dữ liệu đã được cập nhật.function GetWished () {$ .ajax ({url:'/ getWish', type:'GET', Success:function (res) {var wishObj =JSON.parse (res); $ ('# ulist') .empty (); $ ('# listTemplate'). tmpl (wishObj) .appendTo ('# ulist');}, error:function (error) {console.log (error);}});}Gọi cho
GetWishes
trong lệnh gọi lại thành công củaupdate
Cuộc gọi AJAX.$ ('# btnUpdate'). click (function () {$ .ajax ({url:'/ updateWish', data:{title:$ ('# editTitle'). val (), description:$ ( '#editDescription'). val (), id:localStorage.getItem ('editId')}, gõ:'POST', thành công:function (res) {$ ('# editModal'). modal ('hide'); // Điền lại lưới GetWished ();}, error:function (error) {console.log (error);}})});Lưu tất cả các thay đổi và khởi động lại máy chủ. Sau khi đăng nhập vào ứng dụng, hãy thử chỉnh sửa các mong muốn có sẵn do người dùng tạo.
Xóa điều ước
Bước 1:Hiển thị Cửa sổ bật lên Xác nhận
Thêm mã HTML sau vào
userHome.html
.Bạn sẽ Xóa dữ liệu này vĩnh viễn !!
Thêm biểu tượng xóa bên trong
listTemplate
bằng cách thêm HTML sau:Khi nhấp vào biểu tượng xóa ở trên, chúng tôi sẽ gọi một hàm JavaScript có tên là
ConfirmDelete
nơi chúng tôi sẽ kích hoạt cửa sổ bật lên xác nhận.function ConfirmDelete (elem) {localStorage.setItem ('deleteId', $ (elem) .attr ('data-id')); $ ('# deleteModal'). modal ();}Lưu các thay đổi và khởi động lại máy chủ. Sau khi đăng nhập, hãy nhấp vào biểu tượng xóa trong danh sách mong muốn và bạn sẽ có thể thấy cửa sổ bật lên xác nhận.
Bước 2:Xóa điều ước
Để triển khai chức năng Xóa mong muốn, trước tiên hãy tạo thủ tục được lưu trữ trong MySQL để xóa.
DELIMITER $$ SỬ DỤNG `BucketList` $$ TẠO THỦ TỤC` sp_deleteWish` (TRONG p_wish_id bigint, IN p_user_id bigint) BEGINxóa khỏi tbl_wish nơi wish_id =p_wish_id và wish_user_id =p_user_id; END $$ DELIMITER;Quy trình trên lấy ID mong muốn và ID người dùng và xóa điều ước tương ứng khỏi cơ sở dữ liệu.
Tiếp theo, hãy tạo một phương thức bên trong
app.py
để gọi thủ tụcsp_deleteWish
.Chúng tôi sẽ tạo một phương thức có tên là
deleteWish
để xóa điều ước.@ app.route ('/ deleteWish', method =['POST']) def deleteWish ():try:if session.get ('user'):_id =request.form ['id'] _user =session.get ('user') conn =mysql.connect () cursor =conn.cursor () cursor.callproc ('sp_deleteWish', (_ id, _user)) result =cursor.fetchall () nếu len (kết quả) là 0 :conn.commit () return json.dumps ({'status':'OK'}) else:return json.dumps ({'status':'An Lỗi xảy ra'}) else:return render_template ('error.html' , error ='Truy cập trái phép') ngoại trừ Ngoại lệ là e:return json.dumps ({'status':str (e)}) cuối cùng:cursor.close () conn.close ()Trong phương pháp trên, chúng tôi đã xác thực phiên đầu tiên. Khi chúng tôi đã xác thực phiên người dùng, sử dụng ID mong muốn và ID người dùng, chúng tôi đã gọi thủ tục được lưu trữ
sp_deleteWish
.Để gọi phương thức trên
deleteWish
, thêm mộtonclick
vào nút Xóa trong cửa sổ bật lên xác nhận xóa.Tạo một hàm JavaScript được gọi là
Delete
và bên trong Delete thực hiện cuộc gọi AJAX tới phương thức pythondeleteWish
.function Delete () {$ .ajax ({url:'/ deleteWish', data:{id:localStorage.getItem ('deleteId')}, gõ:'POST', thành công:function (res) {var result =JSON.parse (res); if (result.status =='OK') {$ ('# deleteModal'). Modal ('hide'); GetWished ();} else {alert (result.status);} }, error:function (error) {console.log (error);}});}Khi gọi lại thành công
Delete
ở trên chức năng, chúng tôi sẽ kiểm tra trạng thái được trả về và nếu ổn, chúng tôi sẽ ẩn cửa sổ bật lên của phương thức và tải lại các mong muốn.Lưu các thay đổi và khởi động lại máy chủ. Sau khi đăng nhập vào ứng dụng, hãy thử xóa điều ước khỏi trang chủ của người dùng.