Django 类视图
简单的类视图
#导入方法视图模板 from django.shortcuts import render from django.http import HttpResponse,HttpResponseRedirect #导入类视图模块 from django.views import View #定义类视图 class MyView(View): hello = '你好' #方法关键字是固定的如果为get的话那么接收到get请求时会自动运用这个方法那么方法为post就会运用post方法以此类推 def get(self,request): #类的特性共享类属性 print(self.hello) return HttpResponse(self.hello) def post(self,request): return HttpResponse('POST') def put(self,request): return HttpResponse('put') def delete(self,request): return HttpResponse('delete')
路由编写
from django.urls import path,re_path from myapp.views import myapp_index,MyView,MySon,MyTem,MyList,MyClassDef #导入类视图模板模块 from django.views.generic import TemplateView #写路由配置列表 urlpatterns = [ #定义一个匹配类视图的路由,必须用as_view()方法来初始化类视图,as_view()内可以更改类视图内的属性 path('/myview',MyView.as_view(hello='你好我是动态传参')), ]
类的特性继承
#导入方法视图模板 from django.shortcuts import render from django.http import HttpResponse,HttpResponseRedirect #导入类视图模块 from django.views import View #定义类视图 class MyView(View): hello = '你好' #方法关键字是固定的如果为get的话那么接收到get请求时会自动运用这个方法那么方法为post就会运用post方法以此类推 def get(self,request): #类的特性共享类属性 print(self.hello) return HttpResponse(self.hello) def post(self,request): return HttpResponse('POST') def put(self,request): return HttpResponse('put') def delete(self,request): return HttpResponse('delete') # 定义继承类 class MySon(MyView): def get(self,request): #继承父类属性 return HttpResponse(MyView.hello)
渲染模板视图类
#定义一个类视图,用来渲染模板文件 class MyTem(TemplateView): #指定模板名称 template_name = 'myapp/mytem.html' #定义一个类视图,用来渲染模板文件 class MyTem(TemplateView): #指定模板名称template_name是TemplateView类的关键字后为html文件所存在的路径 template_name = 'myapp/mytem.html'
渲染模板视图类也可更简单的展示模板用as_view(),方法更改视图类属性从而达到不写类视图直接设置路由
from django.urls import path,re_path #导入类视图模板模块 from django.views.generic import TemplateView #写路由配置列表 urlpatterns = [ path('/mytem_one',TemplateView.as_view(template_name='myapp/mytem.html')), ]
通用类视图
#导入通用类视图模块 from django.views.generic import ListView #导入数据库类 from mysite.models import User #定义一个通用类视图 class MyList(ListView): #指定模板名称 template_name = 'myapp/mytem.html' #指定变量名称 context_object_name = 'user_list' #读取数据库 #使用重写 def get_queryset(self): user_list = User.objects.all() return user_list
混合使用视图
#导入方法视图模板 from django.shortcuts import render #导入类视图模块 from django.views import View #定义一个混合视图 class MyClassDef(View): #定义一个方法视图 def get(self,request): return render(request,"d2_404.html")