Django中类视图的简单实现--以及类视图的原理

在类视图之前我们先定义一个函数视图来做对比

如果单以函数的方式定义的视图我们称为视图函数,函数视图主要便于我们理解.但遇到一个视图对应的路由(urls)提供了多种不同的HTTP请求方式的支持时,我们需要在一个函数中编写不同的业务逻辑,代码可读性和复用性就不好了

我先来定义一个函数视图来实现多个请求方式

在这里我的子应用是users,我在users的views.py文件中实现以下代码:

#######使用视图函数实现注册 ##########
def register(request):
    # 当以get 请求来访问时,应该返回的是注册页面的内容
    # 利用 request.method 来获取我当前的请求方法  
    if request.method == "GET":
        return HttpResponse("GET方式:请输入注册信息...")

    # 当以 post 请求来访问时,应该返回的是提取数据,并判断注册是否成功
    elif request.method == "POST":
        return HttpResponse("POST方式:注册成功!!!")

    else:
        return HttpResponse("信息错误")

在urls.py中

from django.conf.urls import url

from . import views
urlpatterns = [
	    # register 是访问的路径,views.register 表示我要到 views.py 文件中去找register这个函数
    url(r"^register/$",views.register),
]
接下来是类视图

那么在Django中也可以使用类来定义一个视图,这就称为类视图.
使用类视图可以将不同的请求方式以类中的不同方法来区别定义

######## 定义一个类视图 ############

# 类视图需要导入下面的模块
from django.views import View
# 定义一个类,必须继承自View,表示这是一个类视图
class RegisterView(View):
    # 类视图中的方法 要以请求方式小写形式命名
    def get(self,request):
        return HttpResponse("类视图实现<br>get方式...")

    def post(self,request):
        return HttpResponse("类视图实现<br>post方式...")

    def delete(self,request):
        return HttpResponse("类视图实现<br> delete请求方式...")

    def put(self,request):
        return HttpResponse("类视图实现<br> put请求方式...")

urls.py中

from django.conf.urls import url
from . import views
urlpatterns = [

    # register 是访问的路径,views.register 表示我要到 views.py 文件中去找register这个函数
    url(r"^register/$",views.register),
    
    # 格式:url(r"^在浏览器访问的路径/$",views.类名.as_view()),
    # index 是访问的路径,views.
    # RegisterView表示到views.py 文件中去找 RegisterView 这个类
    # 后面的 .as_view() 调用python 这个函数 告诉它我这是个类视图从而实现相应的功能
    url(r"^index/$",views.RegisterView.as_view()),
]
  • 视图和路由配好之后,可以用postman来用不同的请求方式进行测试.我就不进行测试了

这样类视图的好处就体现出来了

  • 代码可读性好
  • 类视图相对于函数有更高的复用性,一个类视图实现一块功能,如果其他地方西药用到某个类视图的某个特定的逻辑,直接继承这个类视图就可以
以上我们一步步的,一个简单的类视图就定义好了

接下来简单地说一下类视图实现的原理,原理这个东西稍微做个了解就可以.毕竟 python 库很强大,很多模块我们都是直接调用的,知道它用什么来调用就可以

首先在子路由中找到自己的 url(r"^index/$",views.RegisterView.as_view()), 这个路由,然后ctrl+鼠标左键点击一下,就进入到了以下我的截图,一步一步看,其实很简单的一个原理,只要你有耐心,哈哈哈(一页不够大,我把它分页进行讲解)
  1. 第一步: as_view 我们看到它返回了一个 view 函数
  2. 第二步: ctrl + 鼠标左键 找到了 view 函数
  3. 第三步: view 函数 又返回了一个 dispatch函数
  4. 第四步: ctrl + 鼠标左键找到dispatch函数
  5. 第五步: 调用dispatch方法,按照不同请求方式调用不同请求方法

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值