Django基于类的View

本文介绍了Django框架中两种创建视图的方式:基于函数的视图(FBV)和基于类的视图(CBV)。详细解释了每种方式的工作原理及如何在URL配置中使用它们。此外,还探讨了CBV中重写dispatch方法以实现额外功能的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django中有两种方式来创建视图

第一种:FBV(fucntion base view)

FBV就是在url中一个路径对应一个函数

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index)
]

在视图函数中

def index(request):
    if request.method == "GET":
        return render(request, 'index.html')
 

第二种:CBV(class base view)

继承自: django.views.View (继承了View后,通过as_view(),会首先执行View类中的dispatch, 所以我们可以重载dispatch来实现认证装饰器的效果)

CBV就是在url中一个路径对应一个类

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.IndexView.as_view())     # 执行类后面的as_view()方法,是父类里面的方法
]

在视图类中

from django.views import View


class IndexView(View):
  
    # 以get形式访问会执行get函数,一般情况下获取数据
    def get(self, *args, **kwargs):  
        return HttpResponse('666')
      
    # 以post形式访问的话会执行post函数,一般情况下发送数据
    def post(self, *args, **kwargs):  
        return HttpResponse('999')

CBV重新定义dispatch函数

所有的方法本质上都是通过dispatch这个函数反射执行,如果想要在执行get或post方法前执行其他步骤,可以重写dispatch

class User(View):
    http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']

    def dispatch(self, request, *args, **kwargs):
        print("before")
        obj = super(User, self).dispatch(request, *args, **kwargs)
        print("after")
        return obj

    def get(self, request):
        print("get...")
        return HttpResponse("get......")

    def post(self, request):
        print("post...")
        return HttpResponse("post......") 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值