Django实现对数据库数据增删改查(一)
文章目錄
- 1.創(chuàng)建工程
- 2.數(shù)據(jù)顯示
- 2.1數(shù)據(jù)模板
- 2.2邏輯處理
- 2.3路由分發(fā)
- 3.數(shù)據(jù)添加
- 3.1添加新增模板
- 3.2添加視圖函數(shù)
- 3.3路由分發(fā)
- 4.數(shù)據(jù)刪除
- 4.1模板
- 4.2刪除視圖函數(shù)
- 4.3路由分發(fā)
- 5.編輯
- 5.1編輯模板
- 5.2編輯視圖函數(shù)
- 5.3路由分發(fā)
結(jié)合前面接收的 web請求原理,這里繼續(xù)介紹Django部分,本文主要是對于自己在學(xué)習(xí)Django過程中做一些筆記記錄,方便日后回顧學(xué)習(xí)。
1.創(chuàng)建工程
因為本地安裝的pycharm是社區(qū)版本,因此使用命令行的形式,創(chuàng)建一個學(xué)生管理系統(tǒng)
django-admin.py startproject studentManagementSys創(chuàng)建好之后這里會做一下設(shè)置如下:
新增如下目錄
對于app01和staitc 以及template的作用在使用的時候進行介紹
設(shè)置studentmanagementSys下的settings.py文件
創(chuàng)建本地mysql數(shù)據(jù)庫,并且安裝pymsql,創(chuàng)建studentmanagesystem數(shù)據(jù)庫和class表,如下所示
**注:**對于本地安裝mysql數(shù)據(jù)庫和安裝pymysql,比較簡單,可以搜索網(wǎng)上自己安裝
這里手動插入外鍵分別為1和2,對應(yīng)的是Django-*數(shù)據(jù)
2.數(shù)據(jù)顯示
需求1:將數(shù)據(jù)庫中的班級信息展示出來,就和平時訪問網(wǎng)站一樣,請求服務(wù)端的信息(數(shù)據(jù)從數(shù)據(jù)庫獲取的),將其展示在web瀏覽器上給客戶查閱
2.1數(shù)據(jù)模板
UI設(shè)計稿如下所示:
訪問/classes/的時候展示班級信息,因此在template文件夾新增一個classes.html文件
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h1>班級列表</h1><table><thead><tr><th>ID</th><th>班級名稱</th></tr></thead><tbody><tr><td>1</td><td>Django-1班</td></tr></tbody></table> </body> </html>注意:
- 表頭使用thead-tr-tr標(biāo)簽
- 表中使用thead-tr-td
- 標(biāo)位設(shè)置使用tfoot -tr-td
但是標(biāo)中的數(shù)據(jù)比較多,希望是將所有數(shù)據(jù)都展示在前段,而且數(shù)據(jù)也是動態(tài)變化的,因此這樣手動填寫肯定不行,希望使用在數(shù)據(jù)庫查詢將得到的結(jié)果展示在客戶端上,因此對上述的classes.html修改如下:
注意:關(guān)于循環(huán)和取值使用jinjia2的相關(guān)語法。因此現(xiàn)在需要做的就是將數(shù)據(jù)庫查詢的結(jié)果放入class_list中。
2.2邏輯處理
那既然先顯示數(shù)據(jù),涉及到數(shù)據(jù)查詢等相關(guān)邏輯處理,我們就把其放在app01下并建立一個view.py文件。處理邏輯有:
- 查詢數(shù)據(jù)庫
- 數(shù)據(jù)展示
路徑如下所示
因為每一次邏輯處理都需要獲取前段請求的信息,因此這里加入request參數(shù),簡單的理解為就是邏輯處理的前提是要知道客戶請求什么內(nèi)容,這一點非常重要,Django幾乎每一次處理都是這樣的格式func(request).
2.3路由分發(fā)
建立好了模板和視圖函數(shù)之后,現(xiàn)在需要將url和上述功能進行關(guān)聯(lián)起來,就是如何訪問剛才的這個地址
在項目url路由分發(fā)中加入如上所示,這樣整個訪問邏輯如下:
- 訪問1270.0.1:8080/classes/的時候,先到url中找到url路由信息
- 該路由對應(yīng)的是views.classes視圖函數(shù)
- 進入該視圖函數(shù),首先查詢數(shù)據(jù)庫,獲取數(shù)據(jù)信息,接著使用render調(diào)用模板classes.html進行渲染,因為瀏覽器“認(rèn)識”html這個字符串,因此瀏覽器上進行展示
- 運行命令行python manage.py runsever 127.0.0.1:8080
展示如下所示:
上述的數(shù)據(jù)展示就是日常完成的一個數(shù)據(jù)查詢功能
3.數(shù)據(jù)添加
需求2:希望在前段可以進行數(shù)據(jù)添加,比如在添加班級名稱輸入框,添加之后點擊提交成功,如下所示
因此首先要在classes.html界面展示一個添加按鈕,修改classes.html如下:
3.1添加新增模板
新增一個add_class.html模板,展示如需求中的界面
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h1>添加班級</h1><form method="POST" action="/add_class/"><p>班級名稱:<input type="text" name="title"/></p><input type="submit" value="提交" /></form> </body> </html>這樣點擊classes.html中的添加就會跳轉(zhuǎn)到如上的界面中。那因為是添加數(shù)據(jù)到數(shù)據(jù)庫中,因此這里提交數(shù)據(jù)的時候指定方法為POST,action為添加的請求界面
3.2添加視圖函數(shù)
結(jié)合上面的Method=POST,這里點擊跳轉(zhuǎn)的時候使用的是GET方法,但是最終提交的時候用的是POST提交數(shù)據(jù),關(guān)于form中使用Method和action可以參考html中的語法,因此這里說明訪問這個“添加班級”首先使用GET查閱了界面,接著使用POST方法提交數(shù)據(jù)。這也是在上面為什么指定了method=POST的原因
這里同一個html里面會有兩個方法,首先是界面展示的GET,其次是數(shù)據(jù)提交的POST方法。在app01.view.py新增
添加成功之后,可以看到添加的結(jié)果,此時重定向到classes界面中,在該界面會進行數(shù)據(jù)的查詢功能
3.3路由分發(fā)
在訪問/add_class/,首先會去url_patterns下進行匹配,因此這里添加如下路由信息
url(r'^add_class/',views.add_class),
總結(jié)歸納:
這樣就完成了數(shù)據(jù)添加的功能
4.數(shù)據(jù)刪除
需求3:界面展示一個刪除按鈕,點擊刪除后將數(shù)據(jù)庫中的數(shù)據(jù)進行刪除,并返回結(jié)果
這個刪除功能其實就是,點擊刪除之后根據(jù)當(dāng)前的id(key值)去主機中查詢并刪除數(shù)據(jù)庫記錄,刪除之后再次查詢并展示界面上,因此有:
4.1模板
因為刪除也是一個請求過程,且在template.classes.html每一行的id在展示的時候通過row.id可以獲取到,因此在上述分析中,獲取id就直接傳入nid就可以獲取待刪除的記錄的id信息了,這里的+href前文已經(jīng)說過用法,這里不再贅述。
4.2刪除視圖函數(shù)
接著再app01.view.py中定義del_class(request)函數(shù)
def del_class(request):nid = request.GET.get('nid')# 創(chuàng)建連接conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456',db='studentmanagement',charset='utf8')# 創(chuàng)建游標(biāo)cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 執(zhí)行SQL,并返回收影響行數(shù)cursor.execute("delete from class where id=%s",[nid,])conn.commit()# 關(guān)閉游標(biāo)cursor.close()# 關(guān)閉連接conn.close()return redirect('/classes/')4.3路由分發(fā)
在4.1中的模板函數(shù)中
<a href="/del_class/?nid={{ row.id }}">刪除</a>點擊刪除后,會訪問/del_class/,此時會去url_patterns查詢路由,因此在ulls.py文件中增加一個del_class的路由
查到到該路由會去del_class函數(shù)中進行邏輯處理。這樣整個刪除功能就做完了。
5.編輯
上述已經(jīng)實現(xiàn)了查詢,刪除,增加功能
需求4:對查詢的結(jié)果頁中的記錄進行編輯,編輯之后提交并展示編輯后的結(jié)果
這個需求和刪除類似
5.1編輯模板
將信息展示如下,在右側(cè)加入編輯功能
思路就是獲取需要修改記錄的id(key),修改數(shù)據(jù)后提交,當(dāng)然這里既然要修改,那應(yīng)該是界面展示出來原來的數(shù)據(jù)(班級名稱),修改后提交到數(shù)據(jù)庫
將classes.html模板修改為:
當(dāng)然這里對于編輯和刪除按鈕可以分別使用兩個不同的標(biāo)簽。
新增edit_class.html模板
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h1>編輯班級</h1><form method="POST" action="/edit_class/?nid={{ result.id }}"><!--input style="display:none" name="id" value="{{ result.id }}"/--><p>班級名稱:<input type="text" name="title" value="{{ result.title }}"/></p><input type="submit" value="提交" /></form> </body> </html>5.2編輯視圖函數(shù)
這里就和刪除的邏輯類似,先獲取id信息(使用GET),再編輯提交數(shù)據(jù)(使用POST)
def edit_class(request):if request.method =='GET':nid = request.GET.get('nid')print(nid)# 創(chuàng)建連接conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456',db='studentmanagement',charset='utf8')# 創(chuàng)建游標(biāo)cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 執(zhí)行SQL,并返回收影響行數(shù)cursor.execute("select id, title from class where id=%s",[nid,])result = cursor.fetchone()# 關(guān)閉游標(biāo)cursor.close()# 關(guān)閉連接conn.close()print(result)return render(request,'edit_class.html',{"result":result})else:# nid = request.POST.get('id')# title = request.POST.get('title')# 方法二 url傳遞數(shù)據(jù)nid = request.GET.get('nid')title = request.POST.get('title')# 創(chuàng)建連接conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456',db='studentmanagement',charset='utf8')# 創(chuàng)建游標(biāo)cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)# 執(zhí)行SQL,并返回收影響行數(shù)cursor.execute("update class set title=%s where id=%s",[title,nid,])conn.commit()# 關(guān)閉游標(biāo)cursor.close()# 關(guān)閉連接conn.close()return redirect('/classes/')5.3路由分發(fā)
在urls.py中新增如下路由信息
urlpatterns = [# url(r'^admin/', admin.site.urls),url(r'^classes/',views.classes),url(r'^add_class/',views.add_class),url(r'^del_class/',views.del_class),url(r'^edit_class/',views.edit_class),這樣就實現(xiàn)了前段對接服務(wù)端,服務(wù)端對接數(shù)據(jù)庫的一個簡單邏輯,實現(xiàn)了增、刪、改、查的基本功能
1.查詢與添加
2.刪除
3.編輯
總結(jié)對于上述的功能歸納如下:
- 1.新增路由分發(fā)路由,在url_patterns中定義路徑與視圖函數(shù)對應(yīng)關(guān)系
2.實現(xiàn)視圖函數(shù),調(diào)用render/redirect/Httpresponse實現(xiàn)渲染
3.定義html模板函數(shù)
注意事項:
對于使用了模板的情況需要在settings.py中設(shè)置模板路徑
總結(jié)
以上是生活随笔為你收集整理的Django实现对数据库数据增删改查(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web请求原理
- 下一篇: Django实现对数据库数据增删改查(二