<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用 Python 開(kāi)發(fā)一個(gè) 【個(gè)人計(jì)劃 todolist】

          共 2006字,需瀏覽 5分鐘

           ·

          2020-06-24 23:22



          有一句話是這樣說(shuō)的:“凡事預(yù)則立,不預(yù)則廢”,說(shuō)的是我們?cè)谧鍪轮?,最好制定好你的?jì)劃,然后有序的去執(zhí)行,這樣不會(huì)產(chǎn)生過(guò)多的錯(cuò)誤和不爽,如果什么都不準(zhǔn)備的話,人就容易廢掉。

          今天,你廢了么?


          25937987704126e511d9dddd35202fb0.webp


          為了讓我們不要那么快的廢掉,要不我們用 Python 來(lái)寫一個(gè)網(wǎng)頁(yè)版的 todolist, 然后在里面制定自己的計(jì)劃怎么樣?


          33b8886b4fe450a5909c766a51efcf43.webp

          可能你會(huì)想到像這種簡(jiǎn)單一些的網(wǎng)頁(yè)交互,可以用 Flask 來(lái)實(shí)現(xiàn),不過(guò)小帥b今天要給你介紹的是另一個(gè)輕量級(jí)的 web 框架,它叫 bottle ,知道的人相對(duì)較少,但它也是很好用的呢。
          我們要在網(wǎng)站里面寫入計(jì)劃內(nèi)容,就需要用到數(shù)據(jù)庫(kù),我們也可以使用輕量級(jí)的 sqlite 數(shù)據(jù)庫(kù)實(shí)現(xiàn),這個(gè) Python 有自帶的 sqlite3 庫(kù)。
          可以使用它來(lái)創(chuàng)建一張 todo 數(shù)據(jù)表:

          1a929d9f2c19e494c23a550e8e64a249.webp

          其中的 task 字段主要是用來(lái)存放用戶要添加的計(jì)劃內(nèi)容, status 用來(lái)標(biāo)記用戶是否完成計(jì)劃的狀態(tài),比如 1 表示未完成, 0 表示已經(jīng)完成。
          可以通過(guò) insert 插入每一條任務(wù)的數(shù)據(jù):

          e35aa317be9f04fd46c09301235dc622.webp

          執(zhí)行:


          7a30ec84467b2734b9f378465b25b603.webp


          這時(shí)候在你當(dāng)前的目錄下就會(huì)生成一個(gè)數(shù)據(jù)庫(kù)文件,等會(huì)所有的計(jì)劃數(shù)據(jù)都存儲(chǔ)在這里面:


          90fb63e1d1c2e00ba182ecfdf2f6a36a.webp


          如果你之前沒(méi)有安裝過(guò) bottle ,可以使用 pip 安裝一波,它沒(méi)有依賴其它的庫(kù),安裝很快就能搞定。
          安裝完成之后導(dǎo)入 bottle:


          71785c5d372a9da3961d6dc9c7a8e1b6.webp



          定義路由,當(dāng)你訪問(wèn) /todo 首頁(yè)的時(shí)候就會(huì)調(diào)用這個(gè)方法:


          2b11564bf3eb3bdddef33ab6029b17f0.webp


          這時(shí)候可以連接我們剛剛創(chuàng)建數(shù)據(jù)庫(kù),順便將未完成的任務(wù)查找出來(lái),然后將結(jié)果返回進(jìn)行顯示:


          32132572db504da1f6ae3938d6a70802.webp


          接著執(zhí)行服務(wù),你可以自己指定運(yùn)行在服務(wù)器上的什么端口上,這里我指定為 8888 端口:



          454df77fa0c93b0cf3bee7f1a6cccf80.webp

          運(yùn)行 Python 之后,就可以在瀏覽器打開(kāi):localhost:8888/todo



          5a4fd6a79249864308de8c1504b12f08.webp


          可以看到,我們剛剛插入的數(shù)據(jù)顯示出來(lái)了,說(shuō)明服務(wù)和數(shù)據(jù)庫(kù)運(yùn)行正常。
          那么接下來(lái)就把數(shù)據(jù)顯示到首頁(yè),可以使用 bottle 的模板引擎實(shí)現(xiàn)數(shù)據(jù)的綁定,在當(dāng)前的目錄下創(chuàng)建一個(gè) make_table.tpl 文件。


          7027783eb05eae4184e2835896bdf188.webp



          這里我們使用了 HTML 的模板標(biāo)記語(yǔ)言,我們可以在剛剛的 Python 文件中將在數(shù)據(jù)庫(kù)中得到的結(jié)果寫到 rows 里面,然后在?make_table 模板文件中就可以使用它循環(huán)得到相關(guān)的數(shù)據(jù)了:



          5a1fda95bc64b2290445c089896f843e.webp


          運(yùn)行一波:



          c3eb2f2ec4bf9b3d72515c82facf6e1b.webp

          數(shù)據(jù)成功綁定。
          接下來(lái)插入計(jì)劃的內(nèi)容,可以使用 bottle 的 request 做 Get 和 Post 請(qǐng)求。
          創(chuàng)建一個(gè) new_task.tpl 模板文件:


          1ade460d8dcf943ce920546ae6995a36.webp


          這里定義了一個(gè) form 表單,讓它去請(qǐng)求 new 方法,可以在 py 中定義這個(gè)方法,先來(lái)展示看看:



          3e242f14a46a41307d995b5160001a87.webp


          運(yùn)行一波:



          fe755354d33ee7c3cf74a2ad5cf14399.webp


          那么當(dāng)用戶點(diǎn)擊提交的時(shí)候,需要將輸入框的內(nèi)容獲取,然后保存到數(shù)據(jù)庫(kù)中,可以在 new 方法中這樣定義:



          808859de1c01364fed58ddd1ad27c9bf.webp


          這里主要是通過(guò) GET.task 來(lái)獲取輸入框的數(shù)據(jù),然后將數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中,添加成功后顯示一個(gè)成功添加的提醒。
          運(yùn)行一下:


          5a032acb62f6f41e1e877d0cb6eba257.webp


          可以可以,回到首頁(yè)可以看到數(shù)據(jù)確實(shí)添加了:


          c0029c87dca892146471e636b276926d.webp


          可以添加計(jì)劃了,接下來(lái)要實(shí)現(xiàn)的是對(duì)計(jì)劃的編輯,可以讓用戶選擇每條計(jì)劃是否完成了,以及修改計(jì)劃的內(nèi)容:


          9da27741007f9c39ff7cb9b917973d84.webp


          可以寫一個(gè) edit_task.tpl 模板文件來(lái)進(jìn)行數(shù)據(jù)的展示和提交:


          8190f2ed6491962f5b6fca627bc6e5e3.webp


          這里的 form 表單綁定的請(qǐng)求是 edit 方法,其中 {{no}} 指的是計(jì)劃表中的 id,這樣就能根據(jù) id 來(lái)修改特定的計(jì)劃數(shù)據(jù)。
          想要在 input 標(biāo)簽中顯示相關(guān)的計(jì)劃內(nèi)容和狀態(tài),可以在 py 里面通過(guò)數(shù)據(jù)庫(kù)獲取然后返回,放到 old 參數(shù)中,像這樣:


          8ae18a28aeccef77c2ac23dda179cbf7.webp


          而當(dāng)用戶進(jìn)行編輯操作提交的時(shí)候,可以將計(jì)劃的內(nèi)容和狀態(tài)獲取過(guò)來(lái),然后根據(jù) id 來(lái)修改數(shù)據(jù)庫(kù)中的計(jì)劃數(shù)據(jù):



          3a9c7a4a721fc440850cb2a782d39ae9.webp


          在 route 定義那里的 ?指的是我們要接收一個(gè)參數(shù)為 no 的 int 類型數(shù)據(jù),也就是 id。


          運(yùn)行一波就是這樣:



          3a9c7a4a721fc440850cb2a782d39ae9.webp


          回到首頁(yè)可以看到已經(jīng)完成的計(jì)劃就消失了:


          deafc5a3d251d73a227e4a4193ad3bc6.webp

          這樣,一個(gè)個(gè)人計(jì)劃所需的主要功能就實(shí)現(xiàn)了呀~當(dāng)然頁(yè)面有點(diǎn)丑陋,可以用 css 來(lái)裝飾一下,這個(gè)交給你自己玩玩,這次主要是想讓你了解 bottle 的使用,等會(huì)我把源碼都發(fā)你,你可以基于此做更多的改進(jìn)。
          對(duì)于每個(gè)任務(wù)的內(nèi)容,也可以寫一個(gè)方法進(jìn)行查詢,甚至你還可以使用 bottle 寫一個(gè) API 直接返回 Json:


          7d517b84b11916dea0b7e0e385541a38.webp


          這時(shí)候可以這樣訪問(wèn)接口:



          9d880936d83ef67697e00a4e975cd7e3.webp


          當(dāng)然你可以快速自定義 404 頁(yè)面,使用 bottle 的 error 模塊實(shí)現(xiàn):


          4637fa6ae05421cca85cc390986817fd.webp




          87b2de688d9615bcd4cb04d40ecda744.webp

          ok,以上。

          ps:本篇教程主要參考至 bottle 官方文檔的教程,附上 bottle 的官方文檔鏈接:
          http://bottlepy.org/docs/dev/index.html
          小帥b希望以這樣的呈現(xiàn)方式讓你更輕松的了解 bottle 這個(gè)輕量級(jí)?web 框架的使用,除了 Flask 外,這個(gè)也是挺不錯(cuò)的選擇哦,寫一些網(wǎng)頁(yè)還是杠杠的,希望對(duì)你有幫助,那么我們下回見(jiàn)咯~
          本文所涉及的源碼可以在公眾號(hào)后臺(tái)發(fā)送 6 獲取。

          相關(guān):

          用 Python 開(kāi)發(fā)一個(gè)【短鏈接生成器】
          用 Python 開(kāi)發(fā)一個(gè)微信留言小程序



          peace!
          瀏覽 181
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美三级午夜理伦三级18禁 | 激情开心五月天 | 99久久久久 | 国产综合福利在线 | 视频一区三区 |