成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Django基礎(chǔ)之三(類(lèi)視圖)

PAMPANG / 1294人閱讀

摘要:類(lèi)視圖簡(jiǎn)介視圖是一個(gè)可調(diào)用的對(duì)象,它接收一個(gè)請(qǐng)求然后返回一個(gè)響應(yīng),這個(gè)可調(diào)用對(duì)象可以不只是函數(shù),提供一些可以用作視圖的類(lèi)基于類(lèi)的視圖使用對(duì)象實(shí)現(xiàn)視圖,它提供除函數(shù)視圖之外的另外一種方式屬性添加未知的請(qǐng)求方法方法將類(lèi)視圖轉(zhuǎn)換成可被調(diào)用的函數(shù)視

類(lèi)視圖 簡(jiǎn)介

視圖是一個(gè)可調(diào)用的對(duì)象,它接收一個(gè)請(qǐng)求然后返回一個(gè)響應(yīng),這個(gè)可調(diào)用對(duì)象可以不只是函數(shù),Django提供一些可以用作視圖的類(lèi)
基于類(lèi)的視圖使用Python 對(duì)象實(shí)現(xiàn)視圖,它提供除函數(shù)視圖之外的另外一種方式

view

屬性

http_method_names:添加未知的請(qǐng)求方法

方法

as_view():將類(lèi)視圖轉(zhuǎn)換成可被調(diào)用的函數(shù)視圖
dispatch(): 根據(jù)請(qǐng)求去匹配http_method_names下的對(duì)應(yīng)函數(shù)去處理請(qǐng)求
http_method_not_allowed():返回405錯(cuò)誤

實(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,否則會(huì)經(jīng)過(guò),dispatch,http_method_not_allowed():返回405錯(cuò)誤
    def list(self,request,*args,**kwargs):
        return HttpResponse("ListView")
請(qǐng)求方式:
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ù)分頁(yè) 基于sql切片的方式分頁(yè)

數(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]      

類(lèi)視圖

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對(duì)象的分頁(yè)
class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
屬性
- Paginator.count 所有頁(yè)面的objects總數(shù)
- Paginator.num_pages 頁(yè)面總數(shù)
- Paginator.page_range 頁(yè)碼的范圍,從1開(kāi)始,例如[1, 2, 3, 4]
方法
- Paginator.page(number) 返回一個(gè)page對(duì)象,number, 當(dāng)前顯示的是第幾頁(yè)

Page對(duì)象

class Page(object_list, number, paginator)

方法
- Page.has_next() 如果有下一頁(yè),返回True
- Page.has_previous() 如果有上一頁(yè),返回 True
- Page.has_other_pages() 如果有上一面或下一頁(yè),返回True
- Page.next_page_number() 返回下一頁(yè)的頁(yè)碼.如果不存在,拋出InvalidPage異常
- Page.previous_page_number() 返回上一頁(yè)的頁(yè)碼.如果不存在,拋出InvalidPage異常
- Page.start_index() 返回當(dāng)前頁(yè)上的第一個(gè)對(duì)象,相對(duì)于分頁(yè)列表的所有對(duì)象的序號(hào)
- Page.end_index() 返回當(dāng)前頁(yè)上的最后一個(gè)對(duì)象,相對(duì)于分頁(yè)列表的所有對(duì)象的序號(hào)
創(chuàng)建用戶(hù)小例子
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})

請(qǐng)求方式

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"] = "[email protected]"                                     
In [7]: requests.post(url,data)                                                                 
Out[7]: 

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44961.html

相關(guān)文章

  • Django搭建個(gè)人博客:結(jié)束和開(kāi)始

    摘要:教程看到這里,你已經(jīng)學(xué)會(huì)如下內(nèi)容搭建開(kāi)發(fā)環(huán)境博文管理用戶(hù)管理發(fā)表評(píng)論若干小功能搭建簡(jiǎn)單的小博客,以上的功能夠用了。教程為了起步平緩,沒(méi)有展開(kāi)這方面的內(nèi)容。陌生人,祝你學(xué)業(yè)進(jìn)步事業(yè)有成歡迎常到杜賽的個(gè)人網(wǎng)站做客 教程看到這里,你已經(jīng)學(xué)會(huì)如下內(nèi)容: 搭建開(kāi)發(fā)環(huán)境 博文管理 用戶(hù)管理 發(fā)表評(píng)論 若干小功能 搭建簡(jiǎn)單的小博客,以上的功能夠用了。 相信你的志向不止于此。畢竟程序員面試個(gè)個(gè)造火...

    zqhxuyuan 評(píng)論0 收藏0
  • Django基礎(chǔ)之二(URL路由)

    摘要:這種方式叫做反向解析反向匹配反向查詢(xún)或者簡(jiǎn)單的反查實(shí)例視圖函數(shù)模板 URL路由 簡(jiǎn)介 對(duì)于高質(zhì)量的web應(yīng)用來(lái)說(shuō),使用簡(jiǎn)潔,優(yōu)雅的URL路由是一個(gè)值得尊重的細(xì)節(jié),Django可以隨心所欲的設(shè)計(jì)URL,不受框架的約束 為了給一個(gè)應(yīng)用設(shè)計(jì)URL,你需要一個(gè)Python模塊,通常被稱(chēng)為URLconf,這個(gè)模塊是純粹的URL模式(簡(jiǎn)單的正則表達(dá)式)到python函數(shù)(視圖函數(shù))的簡(jiǎn)單映射 ...

    Julylovin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

PAMPANG

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<