通用视图的分析和使用

1、View

        提供基于不同 http 方法执行不同逻辑的功能

2、TemplateView

        基于 view 之上,针对 get 方法提供了渲染特定模板的功能

# 源码分析
class TemplateView(TemplateResponseMixin, ContextMixin, View):
TemplateResponseMixin --> 提供了找到模板名,渲染模板的能力
ContextMixin --> 提供了获取上下文的能力

views.py 

from django.shortcuts import render
from django.views import View
from django.views.generic import TemplateView


class haha(View):
    pass


class TemplateTest(TemplateView):
    template_name = 'the_11/templateView.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data()
        context['lan'] = 'python-django'
        return context

urls.py 

from django.urls import path
from .views import haha, TemplateTest

urlpatterns = [
    path('haha/', haha.as_view()),
    path('TemplateTest/', TemplateTest.as_view()),
]

 templatevie.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>templateview</title>
</head>
<body>
    <h1>这是templateview页面</h1>
    {{ lan }}
</body>
</html>
3、RedirectView

        基于 view 之上提供重定向的功能

        permanent  —— 是否永久重定向

# 永久重定向 —— 301
HttpResponsePermanentRedirect(url)  

# 临时重定向 —— 302
HttpResponseRedirect(url)

        url

        指定 url 直接跳转

class RedirectTest(RedirectView):
    url = '/the_9/index'

        pattern_name  —— url 中 name 的参数

        指定名字,也可以直接跳转

from django.urls import path
from .views import index

urlpatterns = [
    path('index/', index, name='Yang')
]
class RedirectTest(RedirectView):
    # url = '/the_9/index'
    pattern_name = 'Yang'
4、ListView
▶ 提供了什么功能
    以列表的形式展示数据的功能
▶ 数据从哪里来
    数据从数据库中查询得来的
        model
        quertyset
        get_queryset
▶ 提供了哪些模板变量
    object_list
    自定义:   context_object_name
    something_list
▶ 渲染的模板页
    默认
    子应用名/模型名的小写_list.html
    
    # the_12的 ListViews类   使用的是the_10的模型
    # 请问: 模版渲染  渲染的是the_12模版 还是the_10的模版?

   	
    自定义:  template_name
5、Mixins  —— 混入
6、DetailView
▶ 提供了什么功能
	提供的单个变量渲染到模版的功能
▶ 数据从哪里来
	数据从什么地方获取到
         model
        queryset
        get_queryset
    怎么带着数据去查询的
    	get_object
        queryset = queryset.filter(pk=pk)
▶ 提供了哪些模板变量
		object
    	模型名小心 (something) ???  有空测试一下
    	context_object_name
▶ 渲染的模板页
	模型所在的子应用/模型名的小写_detail.html
    template_name

view.py

from django.views import View
from django.views.generic import TemplateView, RedirectView, DetailView

from the_10.models import Something



class DetailViewTest(DetailView):
    model = Something

something_detail.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>something_detail</title>
</head>
<body>
    <h1>something_detail 的页面</h1>
    {{ object.msg }}
</body>
</html>

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值