在类视图之前我们先定义一个函数视图来做对比
如果单以函数的方式定义的视图我们称为视图函数,函数视图主要便于我们理解.但遇到一个视图对应的路由(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+鼠标左键点击一下,就进入到了以下我的截图,一步一步看,其实很简单的一个原理,只要你有耐心,哈哈哈(一页不够大,我把它分页进行讲解)
- 第一步: as_view 我们看到它返回了一个 view 函数
- 第二步: ctrl + 鼠标左键 找到了 view 函数
- 第三步: view 函数 又返回了一个 dispatch函数
- 第四步: ctrl + 鼠标左键找到dispatch函数
- 第五步: 调用dispatch方法,按照不同请求方式调用不同请求方法