視圖層html
1、視圖函數前端
一個視圖函數,簡稱視圖,是一個簡單的python函數,它接收web請求而且會返回web響應。響應能夠是一張網頁的html,一個重定向,或者是一張圖片。。。任何東西均可以。不管是什麼邏輯,最後都必需要返回響應。python
2、視圖層之HttpRequest對象web
django將請求報文中的請求行,首部信息,內容主體封裝成HttpRequest類中的屬性。除了特殊說明的以外,其餘均爲只讀的。django
# 1.前臺Post傳過來的數據,包裝到POST字典中 request.POST # 2.前臺瀏覽器窗口裏攜帶的數據,包裝到GET字典中 request.GET # 3.前臺請求的方式 request.method # 4.post提交的數據,body體的內容,前臺會封裝成:name=lqz&age=18&sex=1 request.body # 5.取出請求的路徑,取不到數據部分 request.path # /test/blog/ # 6.取出請求的路徑,能取到數據部分 request.get_full_path() # /test/blog?id=1&name=tom # 7.META,一個標準的Python 字典,包含全部的HTTP 首部 request.META # 8.一個相似於字典的對象,包含全部的上傳文件信息 request.FILES #FILES 中的每一個鍵爲<input type="file" name="" /> 中的name,值則爲對應的數據。 # 注意,FILES 只有在請求的方法爲POST 且提交的<form> 帶有enctype="multipart/form-data" 的狀況下才有 # 包含數據。不然,FILES 將爲一個空的相似於字典的對象。
3、視圖層之HttpResponse對象編程
響應對象主要有三種形式json
HttpResponse()
render()
redirect()
django視圖函數必需要返回一個HttpResponse對象後端
1.render() 瀏覽器
render結合一個html頁面,而且還能經過字典給該頁面傳遞數據,並返回一個渲染後的HttpResponse對象函數式編程
return render(request,'user_list.html',{'user_lists':user_lists}) #'user_lists'傳遞給頁面
第一個參數是用於生成相應的請求對象,第二個參數是使用的模板名稱,第三個參數是傳遞到模板的數據
render內部原理
from django.template import Template,Context def index(request): temp = Template('<h1>{{ user }}</h1>') con = Context({"user":{"name":'jason',"password":'123'}}) res = temp.render(con) print(res) return HttpResponse(res)
2.redirect()
傳遞須要重定向的url
def index(request): return redirect('/index')
或者
return redirect reverse('index') #這裏的index是取得別名
3.HttpResponse()
def test(request): return HttpResponse('xxx') #頁面顯示xxx
4、視圖層之JsonResponse對象
前端的json
JSON.stringify() >>> json.dumps()
JSON.parse() >>>> json.loads()
from django.http import JsonResponse
import json 1.JsonResponse def index(request): data = {'name':'jason怎麼樣','password':123} return JsonResponse(data,json_dumps_params={'ensure_ascii':False}) #取消中文轉換 2.HttpResponse #使用json轉換數據格式 def index(request): data = {'name':'jason怎麼樣','password':123} res = json.dumps(data,ensure_ascii=False) return HttpResponse(res) 3. def index(request): l=[1,2,3,4,5] return JsonResponse(l,safe=False) #若是返回的不是字典,修改safe參數爲false便可
5、FBV和CBV
FBV和CBV 視圖函數並不僅是指函數,也能夠是類
FBV(基於函數的視圖) 面向函數式編程
CBV(基於類的視圖) 面向對象式編程
基於CBV的視圖(get請求來就會走類裏面的get方法,post請求來就會走類裏面的post方法)
須要注意的幾點設置:
1.urls.py
url(r'^login/',views.MyLogin.as_view())
2.views.py(get請求就走get方法,post請求就走post方法)
from django.views import View class MyLogin(View): def get(self,request): print("from MyLogin get方法") return render(request,'login.html') def post(self,request): return HttpResponse("from MyLogin post方法")
基於FBV的視圖
#路由層 url(r'test/',views.test) #視圖層 def test(request): return HttpResponse('test')
6、文件上傳
form表單上傳文件須要注意的事項
1.enctype須要由默認的urlencoded變成formdata
2.method須要由默認的get變成post
(目前還須要考慮的是提交post請求須要將配置文件中的csrf中間件註釋)
<form action="" method="post" enctype="multipart/form-data"> <input type="file" name="myfile"> <input type="text" name="password"> <input type="submit" value="提交"> </form>
form表單上傳文件,後端須要在request.FILES獲取文件數據,而再也不是POST裏面