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")

 

posted @ 2019-02-13 08:40  TheoldmanPickgarbage  阅读(153)  评论(0编辑  收藏  举报