最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Django4.2_templates之各種標(biāo)簽的用法講解-創(chuàng)新互聯(lián)

四.模板之標(biāo)簽tag
在django中所有的標(biāo)簽均是通過(guò){% %}來(lái)使用。
1.If...elif..else

柯坪網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),柯坪網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為柯坪上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的柯坪做網(wǎng)站的公司定做!
{% if person.age > 20 %}
    {% if person.age < 30 %}
        

{{ person.name }}的年齡大于20小于30

{% elif person.age < 40 %}

{{ person.name }}的年齡小于40

{% else %}

{{ person.name }}的年齡大于等于40

{% endif %} {% elif person.age <= 20 and person.age > 10 %}

{{ person.name }}的年齡大于10小于等于20

{% else %}

{{ person.name }}的年齡大于等于10

{% endif %}

if必須要用{% endif%}來(lái)進(jìn)行結(jié)束,if同樣可以使用嵌套的用法。
2.for循環(huán)

{#for循環(huán)控制語(yǔ)句#}
 

list類(lèi)型的for循環(huán),{{ list1 }}

{% for i in list1 %} {#

{{ i }}

{# 此處遍歷得到的是元素 #} {#

第{{ forloop.counter }}個(gè)元素是:{{ i }}

{# forloop.counter默認(rèn)從1開(kāi)始順序計(jì)數(shù) #} {#

第{{ forloop.counter0 }}個(gè)元素是:{{ i }}

{# forloop.counter0 是從0開(kāi)始順序計(jì)數(shù) #} {#

倒數(shù)第{{ forloop.revcounter }}個(gè)元素是:{{ i }}

{# forloop.revcounter倒數(shù)進(jìn)行計(jì)數(shù),最小值默認(rèn)是1 #}

倒數(shù)第{{ forloop.revcounter0 }}個(gè)元素是:{{ i }}

{# forloop.revcounter0倒數(shù)進(jìn)行計(jì)數(shù),最小值默認(rèn)是0 #} {# 注:不管是順序計(jì)數(shù)的forloop.counter或forloop.counter0還是逆序計(jì)數(shù)的forloop.revcounter或forloop.revcounter0;改變的只是計(jì)算的初始值而已#} {% endfor %}

tuple類(lèi)型的for循環(huán),{{ tuple1 }}

{% for t in tuple1 %}

第{{ forloop.counter }}個(gè)元素是:{{ t }}

{% endfor %}

dict類(lèi)型的for循環(huán),{{ data }}

{% for t in data %}

第{{ forloop.counter }}個(gè)字典的key值是:{{ t }}

{# 字典循環(huán)得到的是key #} {% endfor %}

str類(lèi)型的for循環(huán),{{ str1 }}

{% for s in str1 %}

第{{ forloop.counter }}個(gè)元素是:{{ s }}

{% endfor %} {# #}

forloop.first的用法,list2='{{ list2 }}'

{% for s in list2 %} {# {% if forloop.first %} {# forloop.first 結(jié)果返回布爾值 #} {#

第1個(gè)元素不為False,它是:{{ s }}

#} {# {% endif %}#} {#

第{{ forloop.counter }}個(gè)元素是:{{ s }}

#} {% empty %}

第{{ forloop.counter }}個(gè)元素為空

{% endfor %}

總結(jié):在django模板中的for循環(huán)語(yǔ)句和if條件判斷語(yǔ)句,都要用對(duì)應(yīng)的endfor和endif來(lái)作為結(jié)束的標(biāo)志。且,模板中的變量使用兩個(gè)括號(hào){{ varname }}而模板中的標(biāo)簽語(yǔ)句時(shí)用一個(gè)括號(hào)和百分號(hào)組合進(jìn)行使用的{% tag語(yǔ)句 %}。

3.{% csrf_token %}
CSRF(Cross-site request forgery),中文名稱(chēng):跨站請(qǐng)求偽造,也被稱(chēng)為:one click attack/session riding,縮寫(xiě)為:CSRF/XSRF。

CSRF預(yù)防機(jī)制
CSRF的防御可以從服務(wù)端和客戶(hù)端兩方面著手,防御效果是從服務(wù)端著手效果比較好,現(xiàn)在一般的CSRF防御也都在服務(wù)端進(jìn)行。
token防御的整體思路是:
第1步:后端隨機(jī)產(chǎn)生一個(gè)token,把這個(gè)token保存在SESSION狀態(tài)中;同時(shí),后端把這個(gè)token交給前端頁(yè)面;
第2步:下次前端需要發(fā)起請(qǐng)求(比如發(fā)帖)的時(shí)候把這個(gè)token加入到請(qǐng)求數(shù)據(jù)或者頭信息中,一起傳給后端;
第3步:后端校驗(yàn)前端請(qǐng)求帶過(guò)來(lái)的token和SESSION里的token是否一致;
Django下的CSRF預(yù)防機(jī)制
django 第一次響應(yīng)來(lái)自某個(gè)客戶(hù)端的請(qǐng)求時(shí),會(huì)在服務(wù)器端隨機(jī)生成一個(gè) token,把這個(gè) token 放在 cookie 里。然后每次 POST 請(qǐng)求都會(huì)帶上這個(gè) token,
這樣就能避免被 CSRF ***。
在 templete 中, 為每個(gè) POST form 增加一個(gè) {% csrf_token %} tag. 如下:?
1.在返回的 HTTP 響應(yīng)的 cookie 里,django 會(huì)為你添加一個(gè)     csrftoken 字段,其值為一個(gè)自動(dòng)生成的 token
2.在所有的 POST 表單模板中,加一個(gè){% csrf_token %} 標(biāo)簽,它的功能其實(shí)是給form增加一個(gè)隱藏的input標(biāo)簽,如下
,而這個(gè)csrf_token = cookie.csrftoken,在渲染模板時(shí)context中有context['csrf_token']=request.COOKIES['csrftoken']
3.在通過(guò)表單發(fā)送POST到服務(wù)器時(shí),表單中包含了上面隱藏了crsrmiddlewaretoken這個(gè)input項(xiàng),服務(wù)端收到后,django 會(huì)驗(yàn)證這個(gè)請(qǐng)求的 cookie 里的 csrftoken 字段的值和提交的表單里的 csrfmiddlewaretoken 字段的值是否一樣。如果一樣,則表明這是一個(gè)合法的請(qǐng)求,否則,這個(gè)請(qǐng)求可能是來(lái)自于別人的 csrf ***,返回 403 Forbidden.
4.在通過(guò) ajax 發(fā)送POST請(qǐng)求到服務(wù)器時(shí),要求增加一個(gè)x-csrftoken header,其值為 cookie 里的 csrftoken 的值,服務(wù)湍收到后,django會(huì)驗(yàn)證這個(gè)請(qǐng)求的cookie里的csrftoken字段與ajax post消息頭中的x-csrftoken header是否相同,如果相同,則表明是一個(gè)合法的請(qǐng)求
django為用戶(hù)實(shí)現(xiàn)防止跨站請(qǐng)求偽造的功能,通過(guò)中間件?django.middleware.csrf.CsrfViewMiddleware 來(lái)完成。而對(duì)于django中設(shè)置防跨站請(qǐng)求偽造功能有分為全局和局部。

全局:
中間件?django.middleware.csrf.CsrfViewMiddleware
局部:
?@csrf_protect,為當(dāng)前函數(shù)強(qiáng)制設(shè)置防跨站請(qǐng)求偽造功能,即便settings中沒(méi)有設(shè)置全局中間件。
?@csrf_exempt,取消當(dāng)前函數(shù)防跨站請(qǐng)求偽造功能,即便settings中設(shè)置了全局中間件。
注:from django.views.decorators.csrf import csrf_exempt,csrf_protect
1、原理
  在客戶(hù)端頁(yè)面上添加csrftoken, 服務(wù)器端進(jìn)行驗(yàn)證,服務(wù)器端驗(yàn)證的工作通過(guò)'django.middleware.csrf.CsrfViewMiddleware'這個(gè)中間層來(lái)完成。在django當(dāng)中防御csrf***的方式有兩種:
   1.在表單當(dāng)中附加csrftoken
   2.通過(guò)request請(qǐng)求中添加X(jué)-CSRFToken請(qǐng)求頭。
注意:Django默認(rèn)對(duì)所有的POST請(qǐng)求都進(jìn)行csrftoken驗(yàn)證,若驗(yàn)證失敗則403錯(cuò)誤侍候。

如下圖,前端不帶csrf_token時(shí):
Django4.2_templates之各種標(biāo)簽的用法講解

Django4.2_templates之各種標(biāo)簽的用法講解
下圖開(kāi)始帶csrf_token:
Django4.2_templates之各種標(biāo)簽的用法講解
4.{% url '引用的url地址' %}
主要是在進(jìn)行url別名時(shí)的使用,先在url中為該url設(shè)置別名,這樣其他地方需要引用該地址時(shí)就可以直接使用別名即可。如圖:
Django4.2_templates之各種標(biāo)簽的用法講解

Django4.2_templates之各種標(biāo)簽的用法講解
5.{% with %}
with是將變量進(jìn)行重命名(主要是將view中直接傳來(lái)的復(fù)雜變量名進(jìn)行簡(jiǎn)寫(xiě),只能是view中現(xiàn)有的變量,不能是再進(jìn)一步獲取的變量.例如該例子中可以是view中的person,卻不能是person.name。且必須要以{% endwith %}作為結(jié)束。
Django4.2_templates之各種標(biāo)簽的用法講解
Django4.2_templates之各種標(biāo)簽的用法講解
Django4.2_templates之各種標(biāo)簽的用法講解
注意:with中進(jìn)行變量賦值時(shí),等號(hào)前后不能有空格,否則將報(bào)錯(cuò)不是一個(gè)變量。
6.{% verbatim %}
作用:禁止render在前端瀏覽器渲染該部分的變量,類(lèi)似于轉(zhuǎn)義符’//’表示/一樣的作用。{%verbatim%}也必須以{% endverbatim%}來(lái)作為結(jié)束。
如圖,需要在瀏覽器上顯示{{data}},而不是渲染出view中data變量值:
Django4.2_templates之各種標(biāo)簽的用法講解
Django4.2_templates之各種標(biāo)簽的用法講解
Django4.2_templates之各種標(biāo)簽的用法講解
7.自定義標(biāo)簽
自定義標(biāo)簽的新建步驟參考自定義過(guò)濾器的步驟https://blog.51cto.com/10836356/2318602;
自定義標(biāo)簽和上一節(jié)中的自定義過(guò)濾器的定義方法完全相同,只是自定義標(biāo)簽的上方的裝飾器不同而已。
自定義標(biāo)簽和自定義過(guò)濾器的區(qū)別:
A.自定義過(guò)濾器函數(shù)中只能定義一個(gè)變量(加上自身共2個(gè)變量),而自定義標(biāo)簽函數(shù)的變量個(gè)數(shù)可以任意多;
B.自定義過(guò)濾器是作用于變量的,所以在使用時(shí)一定是在{{a|filter}}中且與作用對(duì)象用’|’隔開(kāi);而自定義標(biāo)簽是使用在{% tagname pram1 pram2 ...%}
C.自定義標(biāo)簽局限性:不能用在if等tag語(yǔ)句中,而filter可以用在if等tag語(yǔ)句中,如圖:
Django4.2_templates之各種標(biāo)簽的用法講解
如下圖所示,可以比較兩者的使用方法和效果:
Django4.2_templates之各種標(biāo)簽的用法講解

Django4.2_templates之各種標(biāo)簽的用法講解

Django4.2_templates之各種標(biāo)簽的用法講解

Django4.2_templates之各種標(biāo)簽的用法講解

歡迎關(guān)注筆者個(gè)人公眾號(hào):
Django4.2_templates之各種標(biāo)簽的用法講解

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。


新聞標(biāo)題:Django4.2_templates之各種標(biāo)簽的用法講解-創(chuàng)新互聯(lián)
URL標(biāo)題:http://fisionsoft.com.cn/article/dscihg.html