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