• 五、python Django CBV视图[基本视图、通用显示视图、通用编辑视图]


    一、CBV视图

    1.基本视图

    1.1View

    基础

    1. urls.py
      解释:Index.as_view()对应view.py的class类Index
    from django.urls import path
    from testCBV.views import *
    app_name='cbv'
    urlpatterns = [
            path('a', Index.as_view(), name='a'),
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. views.py
      解释:先定义一个class,get函数表示所有get请求都经过这个函数,如果定义post函数所有post请求都经过这个函数
    from django.shortcuts import render,HttpResponse
    from django.views.generic.base import View
    # Create your views here.
    class Index(View):
        def get(self,request):
            return HttpResponse("1534")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.2RedirectView

    解释:跳转视图
    导入:from django.views.generic.base import RedirectView

    1. urls.py
    from django.urls import path
    from testCBV.views import *
    app_name='cbv'
    urlpatterns = [
            path('a', Index.as_view(), name='a'),
            path('b',Redirect.as_view(),name='b')
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. views.py
      原理:覆盖继承类的参数
      参数:
      2.1 permanent:True永久跳转301;False临时跳转302
      2.2 url:网址
      2.3 pattern_name:重定向路由命名
      2.4 query_string:是否将参数带往重定向地址
    from django.views.generic.base import RedirectView
    class Redirect(RedirectView):
        permanent = True
        url = None
        pattern_name = 'cbv:a'
        query_string = True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.3TemplateView

    解释:模板视图
    导入:from django.views.generic.base import TemplateView

    参数:

    1. extra_context:写入模板的数据
    2. template_name:模板位置
    class Tem(TemplateView):
        extra_context = {'value': "这是jinja2", "jack":"19999999999999999"}
        template_name = 'testCBV/index.html'
        def get_context_data(self, **kwargs): # 该函数继承父类
            context = super().get_context_data(**kwargs)
            context['number'] = 555
            return context # 其实通俗讲就是给extra_context 里面添加了一个键值对('number':555)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.通用显示视图

    解释:旨在显示数据

    2.1 DetailView

    解释:需要url里面有一个参数为pk(专门有,为内容id),模板里面用的时候比如views.pymodel = Father里面对应模板里面就是father

    urls.py

    urlpatterns = [
            path('a', Index.as_view(), name='a'),
            path('b', Redirect.as_view(), name='b'),
            path('c/', Tem.as_view(), name='c')
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    views.py

    from django.views.generic.detail import DetailView
    class Tem(DetailView):
        extra_context = {'value': "这是jinja2", "jack":"19999999999999999"}
        template_name = 'testCBV/index.html' #注意这个路径问题,应该为/templates/app名字/文件名,不这样的话可以会寻找出错
        model = Father
    
    • 1
    • 2
    • 3
    • 4
    • 5

    testCBV/index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>Document</title>
    </head>
    	{{ value }}							
    	{{ number }}
    	{{ father.name }}
    
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.2 ListView

    解释:全部内容显示(可以设置显示多少),记得设置模板里面循环用的名字

    urls.py

    urlpatterns = [
            path('a', Index.as_view(), name='a'),
            path('b', Redirect.as_view(), name='b'),
            path('c', Tem.as_view(), name='c')
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    views.py

    from django.views.generic import ListView
    class Tem(ListView):
        extra_context = {'value': "这是jinja2", "jack":"19999999999999999"}
        template_name = 'testCBV/index.html'#注意这个路径问题,应该为/templates/app名字/文件名,不这样的话可以会寻找出错
        context_object_name = 'father' # 模板里面循环用的名字
        model = Father
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    testCBV/index.html

    DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
    	<title>Documenttitle>
    head>
    	{% for article in father %}
    	    <li>{{ article.id }} - {{ article.name }}li>
    	{% endfor %}
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.通用编辑视图

    解释:因为现在大多前后端分离,所以下面的内容就属于前后端结合,所以就不详细介绍了
    官方文档

    3.1 FormView

    3.2 CreateView

    3.3 UpdateView

    3.4 DeleteView

  • 相关阅读:
    C++ 三大特性之-多态
    python+robotframework接口自动化测试
    JavaScrip的DOM接口
    1031 查验身份证
    Material Design之CoordinatorLayout 与AppbarLayout与CollapsingToolbarLayout
    基于springboot+vue的戒毒所人员管理系统毕业设计源码251514
    【云原生】DevOps(五):集成Harbor
    如何用echarts画一个好看的饼图
    【SpringSecurity】SpringSecurity2.7.x 的使用(02)
    Nacos 2.1.1 正式发布,微服务大变天
  • 原文地址:https://blog.csdn.net/weixin_46765649/article/details/126087156