Django入门(二) 理解Django生命流程周期
接上篇:Django入門-項目創建與初識子應用
項目的數據庫模型
這里我們先使用sqlite類型的數據庫,后面在進行改變
創建數據庫模型
名詞:
ORM(Object Ralational Mapping,對象關系映射)用來把對象模型表示的對象映射到基于S Q L 的關系模型數據庫結構中去。
這樣,我們在具體的操作實體對象的時候,就不需要再去和復雜的 SQ L 語句打交道,只需簡單的操作實體對象的屬性和方法。
一對多關系:外鍵寫在多的一端
book:hero = 1:n
本示例完成“圖書-英雄”信息的維護,需要存儲兩種數據:圖書、英雄
圖書表結構設計: 表名: Book
圖書名稱: title
圖書發布時間: pub_date
英雄表結構設計: 表名: Hero
英雄姓名: name
英雄性別: gender
英雄簡介: hcontent
所屬圖書: hbook
圖書-英雄的關系為一對多
生成數據庫表
激活模型:編輯 settings.py 文件,將應用加入到 INSTALLED_APPS 中
生成遷移文件
python manage.py makemigrations執行遷移:
python manage.py migrate在數據庫中查看表信息
數據庫模型基本操作
- 現在進入交互式的Python shell,并使用 Django 提供的免費 API
- 引入需要的包:
- 查詢所有圖書信息:
- 新建圖書信息:
- 增加書籍信息
- 查找圖書信息:
- 刪除圖書信息:
- 添加關聯對象
- 獲得關聯集合:返回當前book對象的所有hero
- 篩選
自定義模型加入后臺管理
打開 bookApp/admin.py 文件,注冊模型
from django.contrib import admin from bookApp.models import Book,Hero # 自定義后臺站點管理的拓展閱讀: https://docs.djangoproject.com/zh-hans/3.1/ref/contrib/admin/ # Register your models here. admin.site.register([Book,Hero])- 刷新管理頁面,可以對 Book 的數據進行增刪改查操作 ;
- 后臺管理時, Book管理顯示的是英文, 如何變成中文?
效果:
自定義管理頁面
- Django 提供了 admin.ModelAdmin 類
- 通過定義 ModelAdmin 的子類,來定義模型在 Admin 界面的顯示方式
最終效果展示
- 書籍篩選
- 人物篩選
- 添加圖書信息
- 添加人物信息
- 分頁顯示
列表頁屬性性
list_display:顯示字段,可以點擊列頭進行排序
list_filter:過濾字段,過濾框會出現在右側
search_fields:搜索字段,搜索框會出現在上側
list_per_page:分頁,分頁框會出現在下側
添加、修改頁屬性
fields:屬性的先后順序
fieldsets :屬性分組, 注意: fields和fieldsets 只能設置一個.
關聯對象
對于 Hero 模型類,有兩種注冊方式
- 方式一:與 Book 模型類相同
- 方式二:關聯注冊
admin.StackedInline : 內嵌關聯注冊類
admin.TabularInline : 表格 關聯注冊類
Django快速入門: 前臺管理
第一步: URLconf 路由管理
- 在 Django 中,定義 URLconf 包括正則表達式、視圖兩部分 。
- Django 使用正則表達式匹配請求的URL,一旦匹配成功,則調用應用的視圖 。
- 注意:只匹配路徑部分,即除去域名、參數后的字符串 。
- 在主配置文件中添加子配置文件,使主 urlconf 配置連接到子模塊的 urlconf 配置文件 。
主配置文件配置如下, 已經配置過, 可以忽略此步驟:
# BookManage/urls.py urlpatterns = [ path('admin/', admin.site.urls), # 當用戶訪問的url地址以book開頭, 請訪問bookApp.urls這個url配置文件進行匹配并執行對應 的視圖函數. path('book/', include('bookApp.urls')), ]bookApp 子應用的子配置文件如下:
# bookApp/urls.py urlpatterns = [ # 當用戶訪問bookApp應用的主頁時, 執行視圖函數index,反向根據名稱獲取url地址; path(r'', views.index, name='index'),# 顯示書籍的詳情頁, 接收一個int值并賦值給id path(r'<int:id>/', views.detail, name='detail'), ]第二步: 視圖函數處理業務邏輯
- 在 Django 中,視圖對WEB請求進行回應( response )。
- 視圖接收 reqeust 請求對象作為第一個參數,包含了請求的信息 。
- 視圖函數就是一個Python函數,被定義在 views.py 中 。
- 定義完成視圖后,需要配置 urlconf ,否則無法處理請求。
訪問http://127.0.0.1/book查看效果
編輯 views.py 文件,在方法中調用模板 :
from django.shortcuts import render from django.http import HttpResponse# Create your views here. from bookApp.models import Book # 視圖:對用戶的請求(request)進行業務邏輯操作,最總返回給用戶響應(reponse) def index(request):books = Book.objects.all()#print("用戶請求的路徑:",request.path)#return HttpResponse(books)# 渲染:將上下文context{'books':books}填充到book/index.html代碼中return render(request,'book/index.html',{'books':books}) def detail(request, id):"""書籍詳情頁信息"""book = Book.objects.filter(id=id).first()heros = book.hero_set.all()return render(request, 'book/detail.html',{'book': book, 'heros': heros})等待模板的代碼完善后, 再進行測試。
第三步: 模板管理實現好看的HTML頁面
作為Web 框架, Django 需要一種很便利的方法以動態地生成HTML。最常見的做法是使用模板。
模板包含所需HTML 輸出的靜態部分,以及一些特殊的語法,描述如何將動態內容插入。
(1) 模板引擎配置
創建模板的目錄如下圖:
再次訪問測試
這里我們不能只是出現一個名字。我們要出現數據列表
等待模板的代碼完善后, 再進行測試。
(2) 模板語法: 變量
變量輸出語法
當模版引擎遇到一個變量,將計算這個變量,然后將結果輸出。
變量名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成。
當模版引擎遇到點("."),會按照下列順序查詢:
- 字典查詢,例如: foo[“bar”]
- 屬性或方法查詢,例如: foo.bar
- 數字索引查詢,例如: foo[bar]
- 如果變量不存在, 模版系統將插入’’ (空字符串)。
(3) 模板語法: 常用標簽
語法
作用
- 在輸出中創建文本。
- 控制循環或邏輯。
- 加載外部信息到模板中。
for標簽
{% for ... in ... %} 循環邏輯 {% endfor %}if標簽
{% if ... %} 邏輯1 {% elif ... %} 邏輯2 {% else %} 邏輯3 {% endif %}comment標簽
{% comment %} 多行注釋 {% endcomment %}include標簽
加載模板并以標簽內的參數渲染
url :反向解析
{% url 'name' p1 p2 %}csrf_token 標簽
用于跨站請求偽造保護
(4) 主頁與詳情頁前端HTML設計
定義 index.html 模板
定義 detail.html 模板
在模板中訪問對象成員時,都以屬性的方式訪問,即方法也不能加括號
訪問下面的鏈接, 測試運行是否成功:
http://127.0.0.1:8000/book/
Django請求的生命周期
wsgi : 封裝請求后交給后端的web框架( Flask、Django )。
請求中間件: 對請求進行校驗或在請求對象中添加其他相關數據,例如: csrf、
request.session 。
路由匹配: 根據瀏覽器發送的不同 url 去匹配不同的視圖函數。
視圖函數: 在視圖函數中進行業務邏輯的處理,可能涉及到: ORM、Templates 。
響應中間件: 對響應的數據進行處理。
wsgi : 將響應的內容發送給瀏覽器。
總結
本系統基本功能已經完成, 前端頁面可以搜索好看的 html 進行替換。
安裝配置 django 運行的環境
編寫模型,使用簡單 API 與數據庫交互
使用 Django 的后臺管理中維護數據
通過 視圖 接收請求,通過模型獲取數據,展示出來
調用模板完成展示
總結
以上是生活随笔為你收集整理的Django入门(二) 理解Django生命流程周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kibana数据可视化
- 下一篇: k8s资源监控