1. 程式人生 > >Django之ORM數據庫增刪改查

Django之ORM數據庫增刪改查

esp cti django .post 刪除 數據庫 rec show creat

總結:ORM的 查、增、刪、改

- 查
- client
- 有一個展示頁面(xxx_show.html)
- 這一個頁面一輸入執行後,get請求向server端發送
- 這個展示頁面有添加按鈕、刪除按鈕、編輯按鈕
- 這個頁面要展示內容
- 是server端收到第一次的get請求而做出的response
- 頁面需要用到模板語言for循環
{% for i in result %}
{{ i.xx }} #獲取result中的每個值(也就是server端傳來的東西)
{% endfor %}
- server
- 首先會收到一開始訪問頁面的GET請求
- 收到請求後到urls中找匹配的url,找到對應的url後,執行後面所對應的視圖函數
- 找到對應的視圖函數後就行執行響應的邏輯,也就是拿出數據庫中的東西,發送給server
- 可以通過 models.表名.objects.all() 獲取數據庫這張表中的所有內容(返回一個列表)
- data = models.表名.objects.all()
- 拿到數據後將這些數據給展示(通過render方法)
- return render(request, ‘xxx_show.html‘, ‘result‘:data)
#這裏的result就是要傳給xxx_show.html的一個變量(其中的值就是data的數據)

- 增
- client
- 有一個展示頁面(xxx_show.html)
- 這個頁面有一個添加按鈕(a標簽)
- 點擊這個按鈕(a標簽),client會發送一個get請求,會用a標簽的路徑去訪問server
- 這時會跳轉到a標簽所指的url(/add_xxx/)
- 然後server給出response(這裏的業務邏輯就都得在server)
- 第一次get請求server會返回一個add_xxx.html頁面
- 這是可以添加數據
- 用form表單,action為add_xxx這個url,method為post
- 點擊提交之後client向server發送一個請求
- server收到請求後回復一個response

- server
- 收到a標簽跳轉的url(get請求響應)
- 收到add_xxx這個url進入urls中匹配,匹配到就去他對應的視圖函數
- 這個視圖函數處理響應的業務邏輯
- 首先第一次來的時候時GET請求,這個時候應該將add_xxx.html這個頁面返回給client
- return render(request, add_xxx.html)
- 然後server收到提交的POST請求
- 從POST請求中拿出client發送來的數據
- data = request.POST.get("input標簽的name")
- 將數據存入數據庫
- models.tablename.objects.create(字段=data)
- 將數據庫中的結果重新返回(也就是xxx_show。html)
- return redirect(‘/xxx_show/‘)

- 刪
- client
- 有一個展示頁面(xxx_show.html)
- 有一個刪除按鈕(a標簽)
- 點擊這個按鈕(a標簽),client會發送一個get請求,會用a標簽的路徑去訪問server
- 點擊這個a標簽(按鈕)會跳轉到他對應的url(‘/del_xxx/‘)
- 這時需要將這個按鈕對應的數據傳到server,server才能按照這個數據去刪除
- <a href="/del_xxx/?id={{ i.id }}"><button>del</button></a>
- ?是一個固定格式,而後面就是一些參數(服務端要用的一些參數)
- server收到這個參數後就可以按照他進行相應的操作
- 然後server會返回一個response(這裏的業務邏輯在server端)

- server
- 收到a標簽跳轉的url(get請求響應)
- 收到del_xxx這個url進入urls中匹配,匹配到就去他對應的視圖函數
- 這個視圖函數處理響應的業務邏輯
- 通過client傳來的參數來鎖定刪除的id
- del_id = request.GET.get("id")
- 刪除數據庫中del_id對應的值
- models.tablename.objects.fileter(id=del_id).delete()
- 刪除成功後返回刪除後的頁面(‘/xxx_show/‘)(重定性)
- return redirect(‘/xxx_show/‘)

- 改
- client
- 有一個展示頁面(xxx_show.html)
- 有一個編輯(edit)按鈕(a標簽)
- 點擊這個按鈕(a標簽),client會發送一個get請求,會用a標簽的路徑去訪問server
- 點擊這個a標簽(按鈕)會跳轉到他對應的url(‘/edit_xxx/‘)
- 這時需要將這個按鈕對應的數據傳到server,server才能更改這個數據
- <a href="/edit_xxx/?id={{ i.id }}"><button>del</button></a>
- ?是一個固定格式,而後面就是一些參數(服務端要用的一些參數)
- server收到這個參數後就可以按照他進行相應的操作
- 然後server會返回一個response(這裏的業務邏輯在server端)
- 第一次發送get請求時會跳轉到edit_xxx.html這個頁面,這裏面是該行對應的數據
- 第二次發送post請求,這裏面會有修改後的數據然後發送給server處理
- <form action="/edit_press/?id={{ result.id }}" method="post">
<input type="text" name="updata_name" value="{{ result.name }}">
<input type="submit">
</form>

- input中的數據都是在server查出的數據展現出來的
- id是通過點擊edit按鈕的時候將這個按鈕對應的id值記錄了下來

- 處理完後返回原來的xxx_show


- server
- 收到a標簽跳轉的url(get請求響應)
- 收到edit_xxx這個url進入urls中匹配,匹配到就去他對應的視圖函數
- 這個視圖函數處理響應的業務邏輯
- 第一遍的GET請求
- 通過client傳來的參數來鎖定編輯(edit)的id
- edit_id = request.GET.get("id")
- 會返回當前編輯行的內容
- 從數據庫中拿出這個值,將這個值展現在edit_xxx.html頁面中
- result = models.tablename.objects.filter(id="")[0]
- 返回當前編輯的頁面
- return render(request, ‘edit_xxx.html‘, {‘resule‘: result})

- 第二遍請求是提交數據後的POST請求,
- form表單中的action為這個編輯頁面,
- 這個頁面後面的參數為第一次get請求得到的數據
- 可以通過GET方法來獲取URL上的參數的值

- 這個時候form表單對應的url來urls中找對應的視圖函數
- 這個視圖函數就會執行POST請求的邏輯
- 用這個新數據把數據庫中的舊數據掩蓋
- 獲取更改後的值
- data = request.POST.get("updata_name")
- 更改數據庫中的值
- 從數據庫找到id對應的對象
- #這裏的id就是第一次點擊編輯的時候得到的id值(--對應的)
- new_obj = models.tablename.objects.filter(id=‘edit_id‘)[0]
- new_obj.name = data #將新的值賦值給數據庫中的變量
- new_obj.save() #這個事務必須save數據庫中的數據才會更改

- 更改完成後返回,xxx_show頁面
- return redirect(‘/xxx_show/‘)

註意:
通過GET來獲取URL中的值,POST獲取表單提交的值。

Django之ORM數據庫增刪改查