視圖(views.py):接收web請求,並響應web請求html
在視圖響應web請求的過程當中,響應文件多是網頁,也多是json數據程序員
若響應的是網頁,咱們可分爲:web
視圖函數:在views.py下自定義的各種函數ajax
視圖參數:視圖函數的形式參數,通常咱們寫的是request,這個參數勒通常就存的是咱們瀏覽器發給咱們的內容(一串數據流也能夠稱做是一個HttpRequest實例)django
錯誤視圖:json
404視圖:找不到網頁(url匹配不成功)時返回瀏覽器
咱們也能夠自定義404頁面:服務器
1.在templates下定義404.html(<h2>{{request_path}}</h2> # 致使錯誤的網址)cookie
2.配置setting.pysession
a. DEBUG=True表明永遠不會調用404.html頁面,因此咱們這裏要設置爲False
b. ALLOWED_HOSTS=['*'] # 容許任何人訪問
大概樣子長這樣↓↓↓:
500視圖:在視圖代碼中出現錯誤(服務器代碼錯誤)
400視圖:錯誤出如今客戶端的操做(服務器發現你是爬蟲或cookie中帶了錯誤等)
視圖中可操做對象:
HttpRequest對象:瀏覽器發送給服務器的數據流
服務器接收http請求後,會根據報文(數據流)建立HttpRequest對象,調用視圖時,建立HttpRequest對象就傳入views.py中函數的request形參中。
—— HttpRequest對象的屬性 | HttpRequest對象— —— HttpRequest對象的方法 | —— QueryDict對象 |
HttpRequest對象的屬性:
path | 請求的完整路徑(不包括域名和端口) |
method | 表示請求的方式(get/post) |
encoding |
表示瀏覽器提交數據的編碼方式,通常爲utf-8 |
GET | 相似於字典的對象,包含類get請求的全部參數(獲取瀏覽器地址欄傳遞過來的數據) |
POST | 相似於字典的對象,包含了post請求的全部參數(例:表單提交(獲取瀏覽器提交的數據,並在views函數中做出對應的操做)) |
FILES | 相似於字典的對象,包含了全部上傳的文件(例:word文檔上傳到服務器) |
COOKIES | 字典,包含類全部的cookie對象 |
session | 相似於字典的對象,表示當前會話 |
舉個栗子:
結果:
GET屬性:
舉個栗子:
瀏覽器:
網址:http://localhost:8000/sunck/get1?a=1&b=2&c=3 # GET獲取當數值
結果(瀏覽器顯示):123
網址:http://127.0.0.1:8000/sunck/get2?a=1&a=2&b=3 # GET獲取多個數值a=1&a=2
結果(瀏覽器顯示):123
POST屬性:
舉個栗子:
瀏覽器:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>註冊</title> </head> <body> <form action="regist/" method="post"> 姓名:<input type="text" name="name" value=""/> <hr/> 性別:<input type="radio" name="gender" value="1"/> 男<input type="radio" name="gender" value="0"/> 女<hr/> 年齡:<input type="text" name="age" value=""/> 愛好: <input type="checkbox" name="hobby" value="power"/>權利 <input type="checkbox" name="hobby" value="money"/>金錢 <hr/> <input type="submit" value="註冊"/> </form> </body> </html>
服務器:
from django.shortcuts import render,redirect,HttpResponse def showregist(request): return render(request,'myapp/regist.html') def regist(request): name = request.POST.get("name") gender = request.POST.get("gender") age = request.POST.get("age") # 這個網頁提交過來獲得的值,用模型類建立表單對象,對應的就能夠存入數據表中勒 hobby = request.POST.getlist("hobby") print(name) print(gender) print(age) print(hobby) return HttpResponse("post")
對應url配置(這裏能夠直接用地址重定向,就不用寫這麼複雜勒):
HttpRequest的方法:
is_ajax():若經過XMLHttpRequest發起的,返回True(ajax請求,通常返回json數據)
QueryDict對象:request對象中的GET/POST都屬於QueryDict對象
方法:
get():根據鍵獲取值(且只能獲取一個值)www.sunck.wang/abc?a=1&b=2&c=3
getlist():將鍵的值以列表的形式返回(獲取多個值)
HttpRequest對象是由django建立,HttpResponse對象是由程序員建立(由於要合成返回給瀏覽器的數據)
HttpRequest對象: 給瀏覽器返回數據
返回數據的方法:
1. 不調用模板,直接返回數據(例:return HttpResponse('dasfds'))
2.調用模板:使用render(request, templateName[,context])
做用: 結合數據和模板,返回完整的html頁面
參數:request:請求體對象
templateName:模板路徑
context:傳遞給須要渲染在模板上的數據
舉個栗子:
return render(request,'myapp/main.html',{'username':username})
—— HttpResponse對象的屬性 | HttpResponse對象— —— HttpResponse對象的方法 | —— 子類HttpResponseRedict | —— —— 子類JsonResponse |
HttpResponse對象的屬性:
HttpResponse().content |
返回給瀏覽器內容的類型 |
HttpResponse().charset |
編碼方式 |
HttpResponse().status_code |
響應狀態碼 (200/304/404) |
HttpResponse().content-type |
指定輸出的MIME類型(例:若我是html文件,則按網頁渲染,若我是json文件,則爲json文件接收) |
HttpResponse對象的方法:
init |
使用頁面內容實例化HttpResponse對象 |
write(content) |
以文件的形式寫入 |
flush() |
以文件的形式輸出緩衝區(刷新緩衝區) |
set_cookie(key,value='', max_age=None,exprise=None) |
在瀏覽器存入cookie |
delete_cookie(key) |
刪除cookie(若刪除不存在的key,不會報錯) |
set_cookie方法:
# cookie def cookietest(request): res = HttpResponse() # cookie1 = request.COOKIES # 存入後,取出cookie值 # res.write('<h1>' + cookie['sunck'] + '</h1>') # 在瀏覽器上顯示取出的cookie值 cookie = res.set_cookie('sunck','good') # 存入cookie值,這裏面俺們就能夠存一個token return res # 在瀏覽器》檢查》Network》刷新頁面》選中name》Cookie》查看寫的cookie值
子類HttpResponseRedirect:繼承類HttpResponse類
做用:地址重定向(服務器端的跳轉)
(例:咱們輸入網址1,但顯示的頁面是網址2滴頁面)
簡寫方法:redirect()
舉個栗子:
from django.http import HttpResponseRedirect from django.shortcuts import redirect # 重定向 def redirect1(request): # return HttpResponseRedirect('/sunck/redirect2') return redirect('/sunck/redirect2') # 簡寫方法(推薦使用) def redirect2(request): return HttpResponse('我是重定向頁面')
對應的url:
過程:
當咱們在瀏覽器輸入:http://localhost:8000/sunck/redirect1時,瀏覽器顯示的網址:http://localhost:8000/sunck/redirect2/,這就是重定向,雖然在瀏覽器沒有操做,可是它是在服務器中完成了自我跳轉。
子類JsonResponse:返回json數據,通常用於異步請求(ajax)
(例:若HttpRequest().is_ajax() 爲true,則咱們通常返回的就是json數據)
大概過程:
from django.http import JsonResponse def js(request): if request.is_ajax(): return JsonResponse({}) # 返回json數據,{}表明json數據
注:JsonResponse中屬性Content-type的類型爲application/json(默認返回爲json類型)