五、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. 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.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. 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.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)

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/<int:pk>', Tem.as_view(), name='c')
]

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

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>

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')
]

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

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>
	{% for article in father %}
	    <li>{{ article.id }} - {{ article.name }}</li>
	{% endfor %}
</html>

3.通用编辑视图

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

3.1 FormView

3.2 CreateView

3.3 UpdateView

3.4 DeleteView

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值