zoukankan      html  css  js  c++  java
  • 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")
  • 相关阅读:
    X11学习
    Linux 实用命令
    Notepad++ 添加右键菜单
    VS Code编译C/C++
    map与unordered_map的区别
    Rtt / vxworks 任务状态装换对比
    awesome computer vision repo
    英语每日金句
    不要在意七十亿分之一对另七十亿分之一的看法
    致知在格物,物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后
  • 原文地址:https://www.cnblogs.com/Niuxingyu/p/10367998.html
Copyright © 2011-2022 走看看