摘要:類視圖簡介視圖是一個可調(diào)用的對象,它接收一個請求然后返回一個響應(yīng),這個可調(diào)用對象可以不只是函數(shù),提供一些可以用作視圖的類基于類的視圖使用對象實(shí)現(xiàn)視圖,它提供除函數(shù)視圖之外的另外一種方式屬性添加未知的請求方法方法將類視圖轉(zhuǎn)換成可被調(diào)用的函數(shù)視
類視圖 簡介
視圖是一個可調(diào)用的對象,它接收一個請求然后返回一個響應(yīng),這個可調(diào)用對象可以不只是函數(shù),Django提供一些可以用作視圖的類
基于類的視圖使用Python 對象實(shí)現(xiàn)視圖,它提供除函數(shù)視圖之外的另外一種方式
屬性
http_method_names:添加未知的請求方法
方法
as_view():將類視圖轉(zhuǎn)換成可被調(diào)用的函數(shù)視圖
dispatch(): 根據(jù)請求去匹配http_method_names下的對應(yīng)函數(shù)去處理請求
http_method_not_allowed():返回405錯誤
實(shí)例
from django.views import View class IndexView(View): http_method_names = ["get", "post", "put", "patch", "delete", "head", "options", "trace","list"] def get(self,request,*args,**kwargs): return HttpResponse(IndexView) def post(self,request,*args,**kwargs): data = request.POST return HttpResponse(data) #需要將list方法加入 http_method_names,否則會經(jīng)過,dispatch,http_method_not_allowed():返回405錯誤 def list(self,request,*args,**kwargs): return HttpResponse("ListView") 請求方式: In [27]: import requests In [28]: url = "http://192.168.33.10:8080/dashboard/index/" In [29]: res = requests.request("list",url) In [30]: res.content Out[30]: b"ListView"數(shù)據(jù)分頁 基于sql切片的方式分頁
數(shù)據(jù)準(zhǔn)備
In [3]: from django.contrib.auth.models import User In [4]: for n in range(1,101): ...: User.objects.create_user("wanghui-{}".format(n),"wanghui-{}@alibaba.com".format(n),"123456") In [5]: User.objects.all()[1:10]
類視圖
class UserView(View): #http_method_names = ["get", "post", "put", "patch", "delete", "head", "options", "trace","list"] def get(self,request,*args,**kwargs): #展示數(shù)據(jù) # queryset = User.objects.all() # return HttpResponse(queryset) try: page = int(request.GET.get("page")) except: page = 1 if page < 1: page = 1 per = 10 end = page * per start = end - per queryset = User.objects.all()[start:end] data = [{"id":user.id,"username":user.username,"email":user.email} for user in queryset] return JsonResponse(data,safe=False)基于Paginator對象的分頁
class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True) 屬性 - Paginator.count 所有頁面的objects總數(shù) - Paginator.num_pages 頁面總數(shù) - Paginator.page_range 頁碼的范圍,從1開始,例如[1, 2, 3, 4] 方法 - Paginator.page(number) 返回一個page對象,number, 當(dāng)前顯示的是第幾頁
Page對象
class Page(object_list, number, paginator) 方法 - Page.has_next() 如果有下一頁,返回True - Page.has_previous() 如果有上一頁,返回 True - Page.has_other_pages() 如果有上一面或下一頁,返回True - Page.next_page_number() 返回下一頁的頁碼.如果不存在,拋出InvalidPage異常 - Page.previous_page_number() 返回上一頁的頁碼.如果不存在,拋出InvalidPage異常 - Page.start_index() 返回當(dāng)前頁上的第一個對象,相對于分頁列表的所有對象的序號 - Page.end_index() 返回當(dāng)前頁上的最后一個對象,相對于分頁列表的所有對象的序號創(chuàng)建用戶小例子
from django.core.paginator import Paginator class UserViewV2(View): def get(self,request,*args,**kwargs): queryset = User.objects.all() paginator = Paginator(queryset,10) try: page = int(request.GET.get("page")) except: page = 1 if page < 1: page = 1 page = paginator.page(page) data = [{"id":user.id,"username":user.username,"email":user.email} for user in page.object_list] return JsonResponse(data,safe=False) def post(self,request,*args,**kwargs): username = request.POST.get("username") userpass = request.POST.get("userpass") email = request.POST.get("email") if not username or userpass or not email: return JsonResponse({"errormsg":"參數(shù)有誤!"}) user = User.objects.create(username,email,userpass) return JsonResponse({"id":user.id,"username":user.username,"email":user.email})
請求方式
In [1]: import requests In [2]: url = "http://192.168.33.10:8080/dashboard/userview/" In [3]: data = {} In [4]: data["username"] = "zhangsan" In [5]: data["userpass"] = "123456" In [6]: data["email"] = "zhangsan@alibaba.com" In [7]: requests.post(url,data) Out[7]:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/44961.html
摘要:教程看到這里,你已經(jīng)學(xué)會如下內(nèi)容搭建開發(fā)環(huán)境博文管理用戶管理發(fā)表評論若干小功能搭建簡單的小博客,以上的功能夠用了。教程為了起步平緩,沒有展開這方面的內(nèi)容。陌生人,祝你學(xué)業(yè)進(jìn)步事業(yè)有成歡迎常到杜賽的個人網(wǎng)站做客 教程看到這里,你已經(jīng)學(xué)會如下內(nèi)容: 搭建開發(fā)環(huán)境 博文管理 用戶管理 發(fā)表評論 若干小功能 搭建簡單的小博客,以上的功能夠用了。 相信你的志向不止于此。畢竟程序員面試個個造火...
摘要:這種方式叫做反向解析反向匹配反向查詢或者簡單的反查實(shí)例視圖函數(shù)模板 URL路由 簡介 對于高質(zhì)量的web應(yīng)用來說,使用簡潔,優(yōu)雅的URL路由是一個值得尊重的細(xì)節(jié),Django可以隨心所欲的設(shè)計(jì)URL,不受框架的約束 為了給一個應(yīng)用設(shè)計(jì)URL,你需要一個Python模塊,通常被稱為URLconf,這個模塊是純粹的URL模式(簡單的正則表達(dá)式)到python函數(shù)(視圖函數(shù))的簡單映射 ...
閱讀 2439·2019-08-30 15:56
閱讀 1097·2019-08-30 15:55
閱讀 3270·2019-08-30 15:44
閱讀 1005·2019-08-30 10:53
閱讀 1948·2019-08-29 16:33
閱讀 2642·2019-08-29 16:13
閱讀 773·2019-08-29 12:41
閱讀 941·2019-08-26 13:56