九 django學習筆記四

2021-10-10 13:59:37 字數 4270 閱讀 5992

這篇筆記主要是關於django模組的操作

1.1配置

在工程中建立模板目錄templates,在settings.py配置檔案中修改templates配置項的dirs值:

templates =[,},]

1.2定義模組

在templates目錄中新建乙個模板檔案,如index.html

"en"

>

"utf-8"

>

title<

/title>

<

/head>

}<

/body>

<

/html>

1.3模板渲染

呼叫模板分為兩步驟:

1)找到模板 loader.get_template(模板檔案在模板目錄中的相對路徑) -> 返回模板物件

2)渲染模板 模板物件.render(context=none, request=none) -> 返回渲染後的html文字字串 context 為模板變數字典,預設值為none request 為請求物件,預設值為none

例如,定義乙個檢視

from django.shortcuts import render

defindex

(request)

: context=

return render(request,

'index.html'

,context)

1.4模板語法

1.4.1模板變數

變數名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成。

模板變數可以使python的內建型別,也可以是物件。

def

index

(request)

: context =

,'alist':[

1,2,

3,4,

5]}return render(request,

'index.html'

, context)

1.4.2模板語句

for if 比較運算子

這裡具體可以參考這位大佬的部落格,進行練習大佬部落格

跟著敲一遍就行了

1.4.3django模組中的注釋

單行注釋

多行注釋

我就是多行注釋
此外需要會的過濾器還有

語法如下:

使用管道符號|來應用過濾器,用於進行計算、轉換操作,可以使用在變數、標籤中。

如果過濾器需要引數,則使用冒號:傳遞引數。

變數|過濾器:引數

列舉幾個如下:

safe,禁用轉義,告訴模板這個變數是安全的,可以解釋執行

length,長度,返回字串包含字元的個數,或列表、元組、字典的元素個數。

default,預設值,如果變數不存在時則返回預設值。

data|default:

'預設值'

date,日期,用於對日期型別的值進行字串格式化,常用的格式化字元如下:

y表示年,格式為4位,y表示兩位的年。

m表示月,格式為01,02

,12等。

d表示日, 格式為01

,02等。

j表示日,格式為1

,2等。

h表示時,24進製,h表示12進製的時。

i表示分,為0

-59。

s表示秒,為0

-59。

value|date:

"y年m月j日 h時i分s秒"

1.5繼承模板

模板繼承和類的繼承含義是一樣的,主要是為了提高**重用,減輕開發人員的工作量。

父模板如果發現在多個模板中某些內容相同,那就應該把這段內容定義到父模板中。標籤block:用於在父模板中預留區域,留給子模板填充差異性的內容,名字不能相同。 為了更好的可讀性,建議給endblock標籤寫上名字,這個名字與對應的block名字相同。父模板中也可以使用上下文中傳遞過來的資料。

子模板標籤extends:繼承,寫在子模板檔案的第一行。子模版不用填充父模版中的所有預留區域,如果子模版沒有填充,則使用父模版定義的預設值。填充父模板中指定名稱的預留區域。

例子如下:

定義乙個顯示圖書資訊的父模組,命名為base.html

圖書資訊<

/h4>

書名:書名(請自定義)

<

/p>

% block author %

}作者名(請自定義)

<

/p>

<

/body>

<

/html>

然後建立乙個子模板,在子模板引用 base.html:

紅樓夢曹雪芹

<

/body>

<

/html>

如果需要獲取父模板中的 block 的內容,可以使用 } 變數。如果你想要在父模板 block 中新增內容而不是完全覆蓋它,它將非常有用,用 } 獲取父模板 block 內容:

[新增鏈結描述]

)紅樓夢}

<

/body>

<

/html>

給父模組新增新的內容:

紅樓夢}新增加的內容 

<

/body>

<

/html>

這塊的例子參考了簡述某大佬django模組繼承例子

pip install jinja2
2.3django配置jinjia2

2.3.1在專案檔案中建立jinja2_env.py檔案

from jinja2 import environment

defenvironment

(**options)

: env = environment(

**options)

return env

2.3.2在settings.py檔案

templates =[,},]

jinja2模板的使用絕大多數和django自帶模板一樣,具體可以參考文件

django文件

2.3.4jinja2自定義過濾器

在jinja2_env.py檔案中自定義過濾器

from jinja2 import environment

defenvironment

(**options)

: env = environment(

**options)

# 2.將自定義的過濾器新增到 環境中

env.filters[

'do_listreverse'

]= do_listreverse

return env

# 1.自定義過濾器

defdo_listreverse

(li)

:if li ==

"b":

return

"哈哈"

全拼為cross site request forgery,譯為跨站請求偽造。

csrf指攻擊者盜用了你的身份,以你的名義傳送惡意請求。

包括:以你名義傳送郵件,發訊息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬…

造成的問題:個人隱私洩露以及財產安全。客戶端訪問伺服器時沒有同伺服器做安全驗證

django預設是開啟csrf的

模板中設定 csrf 令牌

或者<

input

type

="hidden" value=

"}">

Django框架學習筆記 九

django的orm主要有兩個功能 操作表 運算元據行 操作表 建立表 修改表 表的結構和資料型別 刪除表 運算元據行 增刪改查 建立資料庫 修改settings.py的資料庫配置,填寫資料庫的相關資訊 引入pymysql來替換mysql db django的orm不能直接連線資料庫,需要借助pym...

django學習筆記(四)

1 請求週期 url 路由 函式或類 返回字串或者模板語言?form表單提交 提交 url 函式或類中的方法 使用者 返回字串 當接受到redirect時 自動發起另外乙個請求 url ajax ajax form物件 serilize type post datatype json traditi...

Django學習筆記(四)載入靜態頁面

本次學習搭建網頁,獲取位址資料 djproject為django應用 student為django子應用 先看看如何載入靜態html的 1 我們先在manage.py同級目錄下建立乙個資料夾存放html頁面檔案,例如 2 django有個函式專門用來載入網頁模板 render to response...