日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Django实现对数据库数据增删改查(一)

發(fā)布時間:2025/3/20 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django实现对数据库数据增删改查(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 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修改如下:
    <!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>{% for row in class_list %}<tr><td>{{ row.id }}</td><td>{{ row.title }}</td></tr>{% endfor %}</tbody></table> </body> </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ù)展示

    路徑如下所示

    from django.shortcuts import render, redirect,HttpResponse import pymysqldef classes(request):# pass# 訪問classes的時候展示班級# 創(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ù)effect_row = cursor.execute("select id,title from class")class_list =cursor.fetchall()print(class_list)# 關(guān)閉游標(biāo)cursor.close()# 關(guān)閉連接conn.close()# 將查詢得到的數(shù)據(jù)放在class_list列表中return render(request,'classes.html',{'class_list':class_list})

    因為每一次邏輯處理都需要獲取前段請求的信息,因此這里加入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如下:

    可定義文檔中的分區(qū)或節(jié)(division/section)。 標(biāo)簽可以把文檔分割為獨立的、不同的部分。它可以用作嚴(yán)格的組織工具,并且不使用任何格式與其關(guān)聯(lián)。如果用 id 或 class 來標(biāo)記 ,那么該標(biāo)簽的作用會變得更加有效,因為要點擊添加并跳轉(zhuǎn)到添加的界面,這里自然使用+href跳轉(zhuǎn)至對應(yīng)的連接請求

    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新增

    def add_class(request):if request.method == 'GET':return render(request,'add_class.html')else:# 獲取add_class.html中的輸入值v= 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#cursor.execute("insert into class(title) values(%s)", [v,])cursor.execute("insert into class(title) values(%s)",v)conn.commit()# 關(guān)閉游標(biāo)conn.close()# 關(guān)閉連接cursor.close()# 重新定向到url_patterns總return redirect('/classes')

    添加成功之后,可以看到添加的結(jié)果,此時重定向到classes界面中,在該界面會進行數(shù)據(jù)的查詢功能

    3.3路由分發(fā)

    在訪問/add_class/,首先會去url_patterns下進行匹配,因此這里添加如下路由信息

    url(r'^add_class/',views.add_class),


    總結(jié)歸納:

  • 點擊添加根據(jù)href中指定的路徑進行跳轉(zhuǎn)到add_class界面,/add_class/查找路由分發(fā)器url_patterns找到views.add_class函數(shù)
  • 界面防范使用GET訪問add_class界面,展示輸入框
  • 輸入數(shù)據(jù)后,點擊提交(表單數(shù)據(jù)將通過 method 屬性附加到 URL 上)
  • 提交數(shù)據(jù)庫后,重定向到classes路徑,此時url_patterns找到views.classes函數(shù),再次去查詢,并展示在界面
    這樣就完成了數(shù)據(jù)添加的功能
  • 4.數(shù)據(jù)刪除

    需求3:界面展示一個刪除按鈕,點擊刪除后將數(shù)據(jù)庫中的數(shù)據(jù)進行刪除,并返回結(jié)果

    這個刪除功能其實就是,點擊刪除之后根據(jù)當(dāng)前的id(key值)去主機中查詢并刪除數(shù)據(jù)庫記錄,刪除之后再次查詢并展示界面上,因此有:

  • 獲取待刪除記錄的id并送到視圖函數(shù)進行邏輯處理(刪除數(shù)據(jù)庫記錄),這里刪除定義為del_class
  • 再次查詢數(shù)據(jù)庫,重定向到/classes/
  • 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模板修改為:

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h1>班級列表</h1><div><a href="/add_class">添加</a></div><table><thead><tr><th>ID</th><th>班級名稱</th><th>操作</th></tr></thead><tbody>{% for row in class_list %}<tr><td>{{ row.id }}</td><td>{{ row.title }}</td><td><a href="/edit_class/?nid={{ row.id }}">編輯</a>|<a href="/del_class/?nid={{ row.id }}">刪除</a></td></tr>{% endfor %}</tbody></table> </body> </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è)置模板路徑

    TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR,'template')],...

    總結(jié)

    以上是生活随笔為你收集整理的Django实现对数据库数据增删改查(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。