Django 项目开发(三)
上次完成了首頁的,還有3個簡單的小需要還沒有完善
- 添加書籍的需求
- 刪除書籍的需求
- 書籍的詳細頁
首先介紹下 MVC
MVC簡介
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用于映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。
- Model(模型)表示應用程序核心(比如數據庫記錄列表)。
- View(視圖)顯示數據(數據庫記錄)。
- Controller(控制器)處理輸入(寫入數據庫記錄)。
Django框架遵循MVC設計,并且有一個專有名詞:MVT
- M全拼為Model,與MVC中的M功能相同,負責和數據庫交互,進行數據處理。
- V全拼為View,與MVC中的C功能相同,接收請求,進行業務處理,返回應答。
- T全拼為Template,與MVC中的V功能相同,負責封裝構造要返回的html。
添加書籍
任何開發都是先編寫后端,在配置路由,最后渲染前端頁面
從View.py開始
添加書籍的本身就是一個提交的過程,所以是POST請求,不是get請求
from?django.shortcuts?import?render,redirect,reversefrom?django.db?import?connection
def?get_corsor():
????#?創建游標
????return?connection.cursor()
def?add_book(request):
????if?request.method?==?'GET':
????????return?render(request,'add_book.html')
????else:
????????name?=?request.POST.get("name")
????????author?=?request.POST.get("author")
????????cursor?=?get_corsor()
????????cursor.execute("insert?into?front_book_manager(id,name,author)?values(null,'%s','%s')"?%?(name,author))
????????#?redirect?重新定向?reverse通過已命名的URL進行渲染
????????return?redirect(reverse('index'))
代碼解析
- 一開始請求是get請求,來到了add_book.html 頁面中
- 因為提交是post請求,將數據寫進數據庫,然后在從數據庫拿到數據,重定向到首頁,剛剛添加的圖書就可以顯示
在urls.py配置路由
path('add_book/',?views.add_book,name='add_book'),最后就是前端add_book.html 頁面的編寫
{%?extends?'base.html'?%}{%?block?content?%}
????<form?action=""?method="post">
????????<table>
????????????<tbody>
????????????????<tr>
????????????????????<td>書名:</td>
????????????????????<td><input?type="text"?name="name"></td>
????????????????</tr>
????????????????<tr>
????????????????????<td>作者:</td>
????????????????????<td><input?type="text"?name="author"></td>
????????????????</tr>
????????????????<tr>
????????????????????<td></td>
????????????????????<td><input?type="submit"?value="提交"></td>
????????????????</tr>
????????????</tbody>
????????</table>
????</form>
{%?endblock?%}
在前端編寫一個表單不是什么難事,注意以下幾點
- input標簽必須帶上name屬性,不然提交不了
- method="post" 表明是post請求,雖然是form默認post請求。
效果如下
書籍的詳細頁
現在要在首頁點擊書名跳轉書籍的詳細頁
分析接口
接口就是前后端約定的api,就是url請求需要啥參數
book_detail/<int:book_id>/這是確保book_id 是int類型
現在規定了book_detail/book_id 是urls
view.py
def?book_detail(request,book_id):????#?上面定義了創建游標了
????cursor?=?get_corsor()
????#?根據book_id?篩選
????cursor.execute("select?id,name,author?from?front_book_manager?where?id=%s"?%?book_id)
????#?得到返回值book是一個元組
????book?=?cursor.fetchone()
????return?render(request,'book_detail.html',context={"book":book})
在urls.py配置路由
path('book_detail/<int:book_id>/',?views.book_detail,name='book_detail')book_detail.html 頁面的編寫
{%?extends?'base.html'?%}{%?block?content?%}
????<p>書名:{{?book.1?}}</p>
????<p>作者:{{?book.2?}}</p>
????<form?action="{%?url?'delete_book'?%}"?method="post">
????????#?拿id來刪除
????????<input?type="hidden"?name="book_id"?value="{{?book.0?}}">?
????????<input?type="submit"?value="刪除按鈕">
????</form>
{%?endblock?%}
效果如下
刪除書籍
現在進去了書籍的詳細頁,就要刪除圖書
接口是delete_book/
View.py 代碼編寫
def?delete_book(request):????if?request.method?==?'POST':
????????#?上面post請求拿到book_id
????????book_id?=?request.POST.get('book_id')
????????cursor?=?get_corsor()
????????cursor.execute("delete?from?front_book_manager?where?id=%s"?%?book_id)
????????return?redirect(reverse('index'))
????else:
????????raise?RuntimeError("刪除圖書的method錯誤!")
urls.py配置路由
path('delete_book/',views.delete_book,name='delete_book')效果如下
總結
至此,簡單不能再簡單的項目基本完成,可以說是django的helloWorld,進門級別。
作為python必須web框架的Django,它的功能強大,內容全面,我們學習Django,其實就是學習一個軟件,要理解它的基本原理,把握它整體框架,牢記一些基本規則,剩下的就是不斷深入細節,然后熟能生巧、經驗多少的問題了
總結
以上是生活随笔為你收集整理的Django 项目开发(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 综合年度汇算每年都有吗
- 下一篇: 在农村卖童装怎么样 算是一个挺好的项目