最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django CBV類的用法詳解

 更新時間:2019年07月26日 15:13:52   作者:bainianminguo  
這篇文章主要介紹了Django CBV類的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前言

之前我們在路由匹配的時候,一個url對應(yīng)一個函數(shù),其實我們還可以一個url對應(yīng)一個類,這個就是CBV,下面我們來簡單的介紹一下CBV

一、CBV的基本用法

1、在路由匹配中要這樣寫,class_login是對應(yīng)的類,as_view()是固定寫法,必須要這么寫,記住后面有個括號

url(r'^class_login/', views.class_login.as_view()),

2、在視圖函數(shù)中導(dǎo)入一個模塊

from django import views

3、在視圖函數(shù)中寫一個類,如果是get請求,則執(zhí)行g(shù)et方法,如果是post請求,則執(zhí)行post方法

class class_login(views.View):
 # 1、如果是get請求,則執(zhí)行g(shù)et函數(shù)
 
  @method_decorator(outer)
  def get(self,request,*args,**kwargs):
    print(request.path)
    return HttpResponse("yyyyyy")
 
  # 2、如果是post請求,則執(zhí)行post函數(shù)
  def post(self,request,*args,**kwargs):
    pass

4、post和get請求是最常見的,還有其他的方法,我們看下視圖函數(shù)中繼承的父類View中的方法,還支持如下這么多的方法

http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

二、裝飾器

上面基本的用法我們就已經(jīng)介紹完了,如果要用裝飾器,該怎么弄呢?

1、需要導(dǎo)入一個模塊

from django.utils.decorators import method_decorator

2、然后定義一個裝飾器

def outer(func):
  def inner(request,*args,**kwargs):
    print(request.method)
    rep = func(request,*args,**kwargs)
    return rep
  return inner

3、我們該如何把裝飾器加的類中的,就需要用到我們第一步導(dǎo)入的模塊了

3_1、為類中的一個函數(shù)添加裝飾器,方法如下

@method_decorator(outer)
def get(self,request,*args,**kwargs):
  print(request.path)
  return HttpResponse("yyyyyy")

3_2、為類中的所有的方法添加裝飾器,方法如下

@method_decorator(outer,name="dispatch")
class class_login(views.View):
 # 1、如果是get請求,則執(zhí)行g(shù)et函數(shù)
 
  # @method_decorator(outer)
  def get(self,request,*args,**kwargs):
    print(request.path)
    return HttpResponse("yyyyyy")
 
  # 2、如果是post請求,則執(zhí)行post函數(shù)
  def post(self,request,*args,**kwargs):
    pass

dispatch就是django默認(rèn)給我們定義的方法,在執(zhí)行g(shù)et或者post方法之前會執(zhí)行的一個方法

4、子類如果想調(diào)用父類的方法,有兩種方法來實現(xiàn)

class login(views.View):
  def dispatch(self, request, *args, **kwargs):
 
    # 調(diào)用父類的dispatch方法的兩種方法
    # 方式1
    super(login,self).dispatch(request,*args,**kwargs)
 
    # 方式2
    super().dispatch(request, *args, **kwargs)
 
    return HttpResponse("ok")
  def get(self,request):
    return HttpResponse("get")
 
  def post(self,rquest):
    return HttpResponse("post")

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

峨边| 东山县| 宁南县| 通海县| 安丘市| 绥宁县| 汽车| 克什克腾旗| 珲春市| 利辛县| 寿阳县| 井冈山市| 大荔县| 汉阴县| 金沙县| 时尚| 阳东县| 杨浦区| 远安县| 芮城县| 庄浪县| 潼南县| 于都县| 杭州市| 平利县| 赣州市| 西乌| 新民市| 太原市| 武隆县| 汉寿县| 库车县| 南丰县| 九江市| 建瓯市| 怀宁县| 双牌县| 玛纳斯县| 池州市| 秦皇岛市| 灵川县|