Django視圖層、模板渲染、1.和2.版本區別

Django視圖層、模板渲染、1.和2.版本區別

Django視圖層、模板渲染、1.和2.版本區別 1

1. 9/5-視圖層 2

1.1. MVC(models view controller)和MTV(models template views) 2

1.2. request對象 2

1.3. 三件套 2

1.3.1. HttpResponse 2

1.3.2. render 3

1.3.3. redirect 3

1.4. JsonResponse 3

1.5. CBV(class base view)和FBV(function base views) 3

1.6. 簡單文件上傳 4

2. 9/5-1.版本和2.版本區別 4

2.1. path 4

2.1.1. 普通轉換器 4

2.1.2. 自定義轉換器 5

2.2. re_path 5

3. 9/6-模板渲染 5

3.1. filter{{ }} 5

3.2. tag{% %} 6

3.3. xss(cross-site scripting attack)跨站腳本攻擊 6

3.4. 自定義過濾器 6

3.5. 自定義標籤 7

 

 

  1. 9/5-視圖層
    1. MVC(models view controller)和MTV(models template views)

MTV和MVC本質上都是一樣的,

MTC也就是我們所寫的,M是模塊,T是模板層,views是視圖層

只不過MVC中把路由和views拼接成了一個控制器,並且v變成了模板層.

    1. request對象

1.如果在模板的form表單中不寫method,默認是get請求.

一般請求數據或者請求頁面的時候用get請求

一般向服務器提交數據的時候用post請求

2.request.GET返回的是一個字典

3.request.POST返回的是一個字典

4.通過request.method返回請求的類型

5.http://127.0.0.1:8000/index/ppp/dddd/?name=lqz

協議:ip地址和端口(在命令終端用ping指令轉換)/路徑?參數(數據)

6.request.path()只獲取路徑,而request.get_full_path()獲取路徑+參數

    1. 三件套
      1. HttpResponse

用於返回響應的內容,通常在該函數內加上響應頭,一般是通過該函數把響應請求返回給用戶

      1. render

用於渲染模板層,通過把數據層的東西提交給模板層,然後進行模板渲染,最後還是通過HttpResponse函數返回響應請求.

      1. redirect

重定向.通過該函數可以指定要跳轉的網頁,可以通過該網頁跳轉到另一個網頁,重定向一般是因爲網頁數據發生更改,或者網頁不存在,需要跳轉到新的頁面,請求狀態碼一般爲301和302,和render函數一樣,最後還是需要通過HttpREsponse函數返回響應消息.

    1. JsonResponse

JsonResponse(向前端頁面發送json格式的字符串)

dic={'name':'laq','age':18}

li=[1,2,3,4]

return HttpResponse(json.dumps(li))#介紹JsonResponse方法的原理,實際情況不用該方法

from django.http import JsonResponse

return JsonResponse(li,safe=False)#除字典以外的數據類型都需要把safe屬性改成False纔可以進行傳輸

    1. CBV(class base view)和FBV(function base views)

FBV就是我們通常寫的函數式的Django.

CBV是用來類來寫Django.

CBV:

from django.views import View

class Test(View):

def dispatch(self,request,*args,**kwargs):#重構View中的dispatch方法,一般情況可以不用更改,View通過該方法判斷請求是get還是post

#加點東西

obj=super().dispatch(request,*args,**kwargs)

return obj

def get(self.request):

obj=render(request,'index.html')

return obj

def post(self.request):

return HttpResponse('ok')

CSV中路由配置:re_path(r'index/',views.Test.as_view())

    1. 簡單文件上傳

模板層代碼:

<form action=""method="post"enctype="multipart/form-data">#enctype是選定文件編碼的格式

username:<input type="text"name="name">

password:<input type="text"name="password">

file:<input type="file"name="myfile">

<input type="submit">

</form>

視圖層代碼:

file_obj=request.FILES.get('myfile')

file_name=file_obj.name

from django.core.filesuploadedfile import InMemoryUploadedFile

with open(file_name,'wb')as f:

for line in file_obj.chunks():#chunks()方法可以把下載的文件一點點讀取存入,因爲for只能循環可迭代對象,因此chunks()方法中用了一個生成器yield

f.write(line)

  1. 9/5-1.版本和版本區別
    1. path

from django.urls import path

不支持正則,精準匹配

有5個普通轉換器

      1. 普通轉換器

int:匹配整型

str:匹配字符串

slug:匹配除/的字符

path:匹配路徑,除了開頭第一個?號都能匹配

uuid:匹配uuid格式

      1. 自定義轉換器

class Test:

regex='[0-9]{4}'

def to python(self,value):

#寫一堆處理

value=value+'aaa'

return value

def to_url(self,value):

#用於反向解析

return'%04d'%value#%04d用於接受小於四位的數並拿0填充至四位

from django.urls import register_converter

register_converter(Test,'ttt')

path('index/<ttt:year>',views.index,name='index')

    1. re_path

用法類似於url,可以使用正則,不多贅述

  1. 9/6-模板渲染
    1. filter{{}}

1.變量:句點符(.),深度查詢(可以點到方法,不需要加括號,但該方法只能是無參函數),對列表、字典使用的時候相當於[].

2.過濾器:

1.date過濾器{{now(使用datetime模塊獲取的當前時間)|date:'Y-m-d H:i:s'}}

2.如果一個變量是false或者爲空,使用給定的默認值,一般爲空字符串,否則使用變量的值,例如,string=''

default過濾器{{string|default:'字符串沒有值'}}#頁面顯示字符串沒有值

3.返回值的長度,它對字符串和列表都有作用string='chenyoude'

length過濾器{{string|length}}

4.將至格式化爲文件尺寸,例如num=1024*1024

filesizeformat過濾器{{num|filesizeformat}}

{{1024|filesizeformat}}

5.切片操作

slice過濾器{{'chenyoude'|slice:'1:9'}}

如果字符串字符多於指定的字符數量,那麼會被截斷,截斷的字符串將以可以翻譯的省略號序列('...')結尾

truncatechars過濾器{{'chenyoude'|truncatechars:5}}

truncatewords過濾器{{'chen you de|truncatewords:2}}

6.安全處理

safe過濾器:{{string|safe}}

可以在視圖層處理相當於safe過濾器的作用

from django.utils.safestring import mark_safe

sting=mark safe(string)

7.相加過濾器(可以傳兩個參數)

add過濾器{{1|add:'1'}}#頁面顯示結果2

    1. tag{%%}

{%for i in l%}

{{forloop}}#forloop必須得在for循環中使用

{%empty%}#如果列表爲空則輸出該行

{%endfor%}

{%if條件%}#if語句支持and、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷.

{%endif%}

{%with dic=dic.name...%}#with一般用於dic.name...過長的時候用於重命名

#{%with dic.name...as dic%}該寫法也是正確

{%endwith%}

    1. xss(cross-site scripting attack)跨站腳本攻擊

xss攻擊,跨站腳本攻擊:即我們如果不對上傳至數據庫的數據進行處理,我們可以輸入一個標籤到數據庫,然後數據庫拿出數據對頁面進行渲染,如果在頁面渲染的時候對數據也不進行處理,這個時候我們輸入的標籤數據則會對頁面進行渲染

    1. 自定義過濾器

1.先去setting裏配置app

2.在app目錄下創建一個templatetags模塊

3.寫py文件(my_test.py)

4.from django import template

5.register=template.Library()

6.寫函數addstr(用requester.filter()裝飾)#函數至少一個形參,最多一個形參,第一個形參一般用於使用該函數的值

7.模板:自行添加語句

6.{%load my_test%}#使用該行下載我們自定義的過濾器

9.{{'cyd'|addstr:'ishandsome'}}

    1. 自定義標籤

1.先在settings裏面配置app

2.在app目錄下創建一個templatetags模塊

3.寫py文件(my_test.py)

4.from django import template

5.register=template.LIvrary()

6.寫函數:

@register.simple_tag(name='yy')

def my_sum(x,y,z,i):

return x+y+z+i

7.模板:

8.{%load my_test%}

9.{%yy 1 2 3 4%}#以空格做分割,傳參數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章