python學習之Django框架(3)
引言
之前我們學習了后臺管理系統和數據庫的部分,現在來學習如何搭建前臺系統
URLconf路由管理
Django 中的視圖的概念是「一類具有相同功能和模板的網頁的集合」
而在我們的圖書管理系統里,需要有以下幾個視圖:
- /admin/ 后臺管理視圖
- /book/ 主頁視圖
- /book/n id為n的某本書信息
在 Django 中,網頁和其他內容都是從視圖派生而來。每一個視圖表現為一個 Python 函數(或者說方法,如果是在基于類的視圖里的話)。Django 將會根據用戶請求的 URL 來選擇使用哪個視圖(更準確的說,是根據 URL 中域名之后的部分)。
# FirstDjango/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
re_path('^book/', include('bookApp.urls'))
]
# bookApp/urls.py
urlpatterns = [
# 當用戶訪問bookApp主頁時,調用index視圖函數
path('', views.index, name='index'),
# 當用戶訪問某本書時,調用detail函數
path('<int:id>/', views.detail, name='detail')
]
# bookApp/views.py
# index視圖函數
def index(request):
return HttpResponse("圖書管理系統")
# detail函數
def detail(request, id):
book = Book.objects.get(id=id)
info = """
圖書:%s
出版日期:%s
""" % (book.title, book.pub_date)
return HttpResponse(info)
測試:
優化界面
這里有個問題:頁面的設計寫死在視圖函數的代碼里的。如果你想改變頁面的樣子,你需要編輯 Python 代碼。所以讓我們使用 Django 的模板系統,只要創建一個視圖,就可以將頁面的設計從代碼中分離出來。
先將原來的view函數使用模板
def index(request):
books = Book.objects.all()
return render(request, 'book/index.html', {'books': books})
# return HttpResponse("圖書管理系統")
def detail(request, id):
book = Book.objects.get(pk=id)
return render(request, 'book/detail.html', {'book': book})
# info = """
# 圖書:%s
# 出版日期:%s
# """ % (book.title, book.pub_date)
# return HttpResponse(info)
編寫模板
模板語法
變量輸出語法
== {{ var }} ==
- 當模版引擎遇到一個變量,將計算這個變量,然后將結果輸出。
- 變量名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成。
- 當模版引擎遇到點("."),會按照下列順序查詢:
- 字典查詢,例如: foo[“bar”]
- 屬性或方法查詢,例如: foo.bar
- 數字索引查詢,例如: foo[bar]
- 如果變量不存在, 模版系統將插入’’ (空字符串)
模板常用標簽:
{ % tag % }
作用:
在輸出中創建文本。
控制循環或邏輯。
加載外部信息到模板中
for標簽:
{% for ... in ... %}
循環邏輯
{% endfor %}
#if標簽
{% if ... %}
邏輯1
{% elif ... %}
邏輯2
{% else %}
邏輯3
{% endif %}
comment標簽
{% comment %}
多行注釋
{% endcomment %}
include標簽
加載模板并以標簽內的參數渲染
{% include "base/left.html" %}
url :反向解析
{% url 'name' p1 p2 %}
csrf_token 標簽
用于跨站請求偽造保護
{% csrf_token %}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首頁</title>
</head>
<body>
<h1>圖書列表</h1>
<hr>
{% for book in books %}
<p>{{ book.title }}<br>
<a href="{{ book.id }}">
<img src="../../static/images/{{ book.id }}.jpg" height="320" width="230"></a>
</p>
{% endfor %}
</body>
</html>
detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>詳細頁</title>
</head>
<body>
<h2>{{ book.title }}</h2>
<ul>
{% for ch in book.character_set.all %}
<li>{{ ch.name }}---{{ ch.sex }}----{{ ch.content }}</li>
{% endfor %}
</ul>
</body>
</html>
目錄結構:
效果:
智能推薦
Python Django框架學習09:Django 路由
路由簡單的來說就是根據用戶請求的 URL 鏈接來判斷對應的處理程序,并返回處理結果,也就是 URL 與 Django 的視圖建立映射關系。 Django 路由在 urls.py 配置,urls.py 中的每一條配置對應相應的處理方法。 Django 不同版本 urls.py 配置有點不一樣: Django1.1.x 版本 url() 方法:普通路徑和正則路徑均可使用,需要自己手動添加正則首位限制符...
Python Django框架學習08:Django 視圖
視圖層 一個視圖函數,簡稱視圖,是一個簡單的 Python 函數,它接受 Web 請求并且返回 Web 響應。 響應可以是一個 HTML 頁面、一個 404 錯誤頁面、重定向頁面、XML 文檔、或者一張圖片... 無論視圖本身包含什么邏輯,都要返回響應。代碼寫在哪里都可以,只要在 Python 目錄下面,一般放在項目的 views.py 文件中。 每個視圖函數都負責返回一個 HttpRespons...
Python Django框架學習06:Django 模型
Django 對各種數據庫提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。 Django 為這些數據庫提供了統一的調用API。 我們可以根據自己業務需求選擇不同的數據庫。 MySQL 是 Web 應用中最常用的數據庫。本章節我們將以 Mysql 作為實例進行介紹。你可以通過本站的 MySQL 教程 了解更多Mysql的基礎知識。 如果你沒安...
Python Django框架學習(一)
本文章只適用于初學者,大神請跳過 簡介: Django是一個開放源代碼的Web應用框架,由Python寫成。采用了MTV的框架模式,即模型M,視圖V和模版T。它最初是被開發來用于管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的,即是CMS(內容管理系統)軟件。并于2005年7月在BSD許可證下發布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。 Django環境準...
Python3搭建Django框架詳解
最近在學習python語言,學過python的都知道Django是python web項目中比較好的一個框架,于是我也就去研究了一下,在這里把搭建步驟和遇到的問題給大家分享一下,有什么地方不明吧的也可以加關注我們一起討論學習。 Django框架搭建步驟如下: 1.首先,你需要安裝Python環境,我本機是安裝的Python3.6.4;以及我們要...
猜你喜歡
Python3搭建Django框架淺析
前言 Python下有許多款不同的 Web 框架。Django是重量級選手中最有代表性的一位。許多成功的網站和APP都基于Django。 Django 是一個開放源代碼的 Web 應用框架,由 Python 寫成。Django 遵守 BSD 版權,初次發布于 2005 年 7 月, 并于 2008 年 9 月發布了第一個正式版本 1.0 。 使用 Django,只要很少的代碼,程序開發人員就可以輕...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...