1.1. MVC(models view controller)和MTV(models template views) 2
1.5. CBV(class base view)和FBV(function base views) 3
3.3. xss(cross-site scripting attack)跨站腳本攻擊 6
MTV和MVC本質上都是一樣的,
MTC也就是我們所寫的,M是模塊,T是模板層,views是視圖層
只不過MVC中把路由和views拼接成了一個控制器,並且v變成了模板層.
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()獲取路徑+參數
用於返回響應的內容,通常在該函數內加上響應頭,一般是通過該函數把響應請求返回給用戶
用於渲染模板層,通過把數據層的東西提交給模板層,然後進行模板渲染,最後還是通過HttpResponse函數返回響應請求.
重定向.通過該函數可以指定要跳轉的網頁,可以通過該網頁跳轉到另一個網頁,重定向一般是因爲網頁數據發生更改,或者網頁不存在,需要跳轉到新的頁面,請求狀態碼一般爲301和302,和render函數一樣,最後還是需要通過HttpREsponse函數返回響應消息.
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纔可以進行傳輸
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())
模板層代碼:
<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)
from django.urls import path
不支持正則,精準匹配
有5個普通轉換器
int:匹配整型
str:匹配字符串
slug:匹配除/的字符
path:匹配路徑,除了開頭第一個?號都能匹配
uuid:匹配uuid格式
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')
用法類似於url,可以使用正則,不多贅述
- 9/6-模板渲染
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
{%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%}
xss攻擊,跨站腳本攻擊:即我們如果不對上傳至數據庫的數據進行處理,我們可以輸入一個標籤到數據庫,然後數據庫拿出數據對頁面進行渲染,如果在頁面渲染的時候對數據也不進行處理,這個時候我們輸入的標籤數據則會對頁面進行渲染
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.先在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%}#以空格做分割,傳參數