from django.shortcuts import render from django.views import View """ 1. 类视图的声明必须直接或者间接继承于django.views.View 2. 类视图中的视图方法名称是固定的.必须以http请求的小写方法名作为视图方法名!!!【get,post,put,patch,delete】 3. 每一个视图类都可以绑定一个路由, 而视图类中的所有视图方法共享这个路由地址 4. 类方法的名称虽然固定, 但是类视图并非每个方法都要添加.注意,同一个视图类下,类方法名不能重复. """ class IndexView(View): """类视图""" def get(self,request): """只允许通过get请求访问,建议编写读取数据的页面,一般例如:首页,列表页,详情页""" name = "get请求页面" return render(request,"index5.html",locals()) def post(self,request): """只允许通过post请求访问,一般用于上传,添加数据的页面""" name = "post请求页面" return render(request,"index5.html",locals()) def put(self,request): """只允许通过put请求访问,一般用于修改,更新数据的页面""" name = "put请求页面" return render(request,"index5.html",locals()) def patch(self,request): """只允许通过patch请求访问,一般用于修改,更新数据的页面""" name = "patch请求页面" return render(request,"index5.html",locals()) def delete(self,request): """只允许通过delete请求访问,一般用于处理删除数据的页面""" name = "delete请求页面" return render(request,"index5.html",locals())
类视图的路由绑定
from django.urls import path from . import views urlpatterns = [ # 给类视图绑定路由的格式固定如下: # path("访问路径", views.类名.as_view()), path("demo", views.IndexView.as_view()), ]
我们可以通过postman来切换不同的http请求访问到同一个地址下不同的视图类方法中.这个主要原因是类视图的父类django.views.View
中提供了dispatch的路由分发方法实现的.
这个路由分发方法,是开发者在给视图类绑定路由时调用了as_views()方法时进行注册调用的.
from django.shortcuts import render from django.views import View # Create your views here. from django.http.response import JsonResponse class BaseView(View): """公共视图基类""" # 可以把没有参数的类方法,转换成普通属性来调用 @property def json(self): """用于接受并装换json数据成字典""" import json data = json.loads(self.request.body) return data class UserView(BaseView): def get(self, request): user_info = { "id": 10, "name": "xiaoming", "age": 17 } return JsonResponse(user_info) def post(self,request): # 接受数据 # print( request.body ) # 可以继承公共视图类,使用自己封装json方法获取请求体的json数据 data = self.json print(data) name = "post请求页面" return JsonResponse({"errmsg":"ok","errno":200,"data":{"name":name}}) def put(self, request): """只允许通过put请求访问,一般用于修改,更新数据的页面""" name = "put请求页面" return JsonResponse({"errmsg":"ok","errno":200,"data":{"name":name}}) def patch(self, request): """只允许通过patch请求访问,一般用于修改,更新数据的页面""" name = "patch请求页面" return JsonResponse({"errmsg":"ok","errno":200,"data":{"name":name}}) def delete(self, request): """只允许通过delete请求访问,一般用于处理删除数据的页面""" name = "delete请求页面" return JsonResponse({"errmsg": "ok", "errno": 200,"data":{"name":name}})
在django提供的视图类View使用中,还提供了一些视图子类, 不过这块内容需要结合django的数据库操作才可以使用 视图子类是django为了方便开发者快速提供基于不同http请求视图而提供的。 from django.views.generic import ListView,DetailView,CreateView,UpdateView,DeleteView ListView: 列表视图,可以通过get请求访问,用于展示列表数据,内置了分页功能 DetailView:详情视图,可以通过get请求访问,用于展示单个数据 CreateView:添加视图,可以通过get/post请求访问,用于添加单个数据 UpdateView:更新视图,可以通过get/post请求访问,用于更新单个数据 DeleteView:删除视图,可以通过get请求访问,用于删除单个数据