Django 9 常用通用视图分析

这篇具有很好参考价值的文章主要介绍了Django 9 常用通用视图分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

View

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

1. 创建 terminal输入 django-admin startapp the_13回车 

2.tutorial子文件夹 settings.py注册一下

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "the_3",
    "the_5",
    "the_6",
    "the_7",
    "the_8",
    "the_9",
    "the_10",
    "the_12",
    "the_13",
]

3. tutorial子文件夹 urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('the_3/', include('the_3.urls')),
    path('the_4/', include('the_4.urls')),
    path('the_5/', include('the_5.urls')),
    path('the_7/', include('the_7.urls')),
    path('the_10/', include('the_10.urls')),
    path('the_12/', include('the_12.urls')),
    path('the_13/', include('the_13.urls')),
]

4. the_13\views.py 

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


# Create your views here.

class Hello(View):
    pass

ctrl + 鼠标左键 点击 View可以看源码里面的View方法 。

Django 9 常用通用视图分析,django,python,后端

as_view方法里面重写了view方法,这个view方法返回dispatch功能,通过dispatch功能的分发方法,然后去method方法中看到对应的方法有get,post等方法,views.py 里面的hello就可以执行对应的get或者post方法

Django 9 常用通用视图分析,django,python,后端

Django 9 常用通用视图分析,django,python,后端

TemplateView

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

1. the_13\views.py 添加 class TemplateTest(TemplateView):

2. ctrl + 鼠标左键点击TemplateView

class TemplateView(TemplateResponseMixin, ContextMixin, View):
    """
    Render a template. Pass keyword arguments from the URLconf to the context.
    """
    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)

可以看到 TemplateView 继承了 TemplateResponseMixin, ContextMixin, View。

class TemplateResponseMixin:
    """A mixin that can be used to render a template."""
    template_name = None
    template_engine = None
    response_class = TemplateResponse
    content_type = None

3. templates文件夹创建子文件夹 the_13, 再在新建的the_13文件夹创建panda.html, panda.html的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>panda</title>
</head>
<body>
    <h1>这是TemplateView的页面</h1>
</body>
</html>

4.  the_13\views.py 

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


# Create your views here.

class Hello(View):
    pass

class TemplateTest(TemplateView):
    template_name = 'the_13/panda.html'
TemplateResponseMixin ---> 提供了找到模板名然后渲染模板的能力
class ContextMixin:
    """
    A default context mixin that passes the keyword arguments received by
    get_context_data() as the template context.
    """
    extra_context = None

    def get_context_data(self, **kwargs):
        kwargs.setdefault('view', self)
        if self.extra_context is not None:
            kwargs.update(self.extra_context)
        return kwargs
ContextMixin ---> 帮我们获取上下文的能力

5. the_13\views.py

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


# Create your views here.

class Hello(View):
    pass

class TemplateTest(TemplateView):
    template_name = 'the_13/panda.html'

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

6. the_13\urls.py

from django.urls import path
from .views import TemplateTest

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

7. 运行tutorial, 点击http://127.0.0.1:8000/, 浏览器地址栏 panda, 刷新浏览器 

Django 9 常用通用视图分析,django,python,后端

8. templates\the_13\panda.html body 里面添加 {{ lan }}

<body>
    <h1>这是TemplateView的页面</h1>
    {{ lan }}
</body>

9. 刷新浏览器 

Django 9 常用通用视图分析,django,python,后端

TemplateView总结 

  • 提供了什么功能: 在view的基础上,针对get方法, 渲染指定模板的功能
  • 数据从哪里来: 没数据 ----  get_context_data
  • 提供了哪些模板变量  没提供
  • 渲染的模板页   template_name 自定义

RedirectView

基于View之上, 提供了重定向的功能

  • permanent
  • url
  • pattern_name

1. the_13\views.py 

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


# Create your views here.

class Hello(View):
    pass

class TemplateTest(TemplateView):
    template_name = 'the_13/panda.html'

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

    # def post(self):
    #     pass

"""
render(request,'模板', {"lan":"python-django"})
"""

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

2. the_13\urls.py 

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

urlpatterns = [
    path('template_test/', TemplateTest.as_view()),
    path('redirect_test/', RedirectTest.as_view()),
]

3. 运行tutorial, 点击 http://127.0.0.1:8000/,

浏览器地址栏 http://127.0.0.1:8000/the_13/redirect_test/ 刷新 

Django 9 常用通用视图分析,django,python,后端

4. pattern_name, 在 the_10\urls.py 

from django.urls import path
from .views import index

urlpatterns = [
    path('index/', index, name='hua'),
]

5. the_13\views.py 

class RedirectTest(RedirectView):
    # url = '/the_10/index/'
    pattern_name = 'hua'

6. 运行 tutorial, 点击http://127.0.0.1:8000/ , 浏览器地址栏 http://127.0.0.1:8000/the_13/redirect_test/ 刷新

Django 9 常用通用视图分析,django,python,后端

源码分析 :

permanent = False   是否永久重定向
url = None
pattern_name = None   url中name参数
query_string = False

RedirectView总结 

  • 提供了什么功能: 基于View之上提供重定向的功能
  • 数据从哪里来: url pattern_name
  • 提供了哪些模板变量  没提供
  • 渲染的模板页   没渲染

通用视图分析法

  • 提供了什么功能
  • 数据从哪里来
  • 提供了哪些模板变量
  • 渲染的模板页

ListView

提供以(分页)列表形式展示一个(或多个关联)数据库表的功能

  • queryset、model、get_queryset
  • paginate_by、page
  • context_object_name
  • template_name
提供了什么功能
    以列表的形式展示数据的功能
数据从哪里来
    数据从数据库中查询得来的
    model
    queryset
    get_queryset
提供了哪些模板变量
    object_list
    自定义 : context_object_name
    something_list
渲染的模板页
    默认
    子应用名/模型名的小写_list.html
      the_12的ListViews类使用的是the_10的模型
      请问模板渲染 渲染的是the_12的模板还是the_10的模板
       回答: the_10的, 模型在哪里,渲染的应用就在哪里

    自定义:template_name

Mixins

从ListView入手分析混入 

混入可以继承多个,但是View只能继承一个

DetailView

  • template_name_suffix
  • object 

1. the_13\views.py 

from django.shortcuts import render
from the_12.models import SomeThing
from django.views import View
from django.views.generic import TemplateView, RedirectView, ListView, DetailView


# Create your views here.

class Hello(View):
    pass

class TemplateTest(TemplateView):
    template_name = 'the_13/panda.html'

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

    # def post(self):
    #     pass

"""
render(request,'模板', {"lan":"python-django"})
"""

class RedirectTest(RedirectView):
    # url = '/the_10/index/'
    pattern_name = 'hua'

class DetailViewTest(DetailView):
    model = SomeThing

2. the_13\urls.py 

from django.urls import path
from .views import TemplateTest,RedirectTest,DetailViewTest

urlpatterns = [
    path('template_test/', TemplateTest.as_view()),
    path('redirect_test/', RedirectTest.as_view()),
    path('detail_test/<int:pk>', DetailViewTest.as_view()),
]

3. templates\the_13文件夹创建 something_detail.html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
    <h1>hello world</h1>
</body>
</html>

4. 运行tutorial, 点击 http://127.0.0.1:8000/, 浏览器地址栏 

ImproperlyConfigured at /the_13/detail_test/1 刷新 

Django 9 常用通用视图分析,django,python,后端

5. 把 something_detail.html 移动到 templates\the_12文件夹,再刷新浏览器 

Django 9 常用通用视图分析,django,python,后端

6. something_detail.html  body 里面 添加 msg 是 {{ object.msg }}

<body>
    <h1>hello world</h1>
    msg 是 {{ object.msg }}
</body>

7. 刷新浏览器 

Django 9 常用通用视图分析,django,python,后端

8. something_detail.html  body 里面 去掉 msg 是

<body>
    <h1>hello world</h1>
    {{ object.msg }}
</body>

9. 刷新浏览器 

Django 9 常用通用视图分析,django,python,后端

10. 把地址栏最后的数字,改成2,或者 3 刷新, 会得到第二条msg, 或者第三条msg

Django 9 常用通用视图分析,django,python,后端

Django 9 常用通用视图分析,django,python,后端

DetailView总结 

  • 提供了什么功能: 提供了单个变量渲染到模板的功能
  • 数据从哪里来:  

                数据从什么地方获取到

                model
                queryset
                get_queryset

                怎么带着数据去查询的            

                get_object
                queryset = queryset.filter(pk=pk)
  • 提供了哪些模板变量   

                object

                模型名小写(something) ???  可以测试一下

                context_object_name

  • 渲染的模板页   

                模型所在的子应用/模型名的小写_detail.html

                template_name 文章来源地址https://www.toymoban.com/news/detail-813057.html

到了这里,关于Django 9 常用通用视图分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django视图

    一、url路由 自上而下的,如果匹配的路由中是包含int转换器,则不能匹配其他的不是int的相关字符,譬如文字等; 自定义路由转换器: 1、创建一个converter.py的文件; 2、再写一个类: class FourDigitYearConverter: regex = ‘[0-9]{4}’ # 类属性,一个字符串形式的正则表达式属性 def

    2024年02月05日
    浏览(33)
  • Django - 视图和模板

    视图 - 是具体的业务代码 在 app 下的 views.py 文件中编写代码     为了调用该视图,我们还需要编写urlconf,也就是路由配置。在polls目录中新建一个文件,名字为urls.py(不要换成别的名字),在其中输入代码如下:     接下来,在项目的主urls.py文件中添加urlpattern条目,指

    2024年04月11日
    浏览(37)
  • Django登录注销视图

    Django在身份验证框架中包含了一些你可以直接使用的表单和视图。在大多数情况下,可以使用默认的Django认证视图。 Django在django.contrib.auth.views提供了以下基于类的视图来处理身份验证: LoginView:处理登录表单并登录用户 LogoutView:注销用户 Django提供了以下视图来处理密码修

    2024年01月21日
    浏览(39)
  • Django基础3——视图函数

    模块类型 函数释义 http HttpResponse:给客户端返回结果信息。 FileResponse:下载文件。 JsonResponse:返回JSON。 StreamingHttpResponse:响应可迭代对象。 shortcuts render:响应HttpResponse对象,一个快捷函数。 redirect:跳转函数 views generic view 类视图继承的类。 decorators csrf csrf_exempt,csrf_pr

    2024年02月11日
    浏览(34)
  • Django之视图

    一)文件与文件夹 当我们设定好一个Djiango项目时,里面会有着view.py等文件,也就是文件的方式: 那么我们在后续增加app等时,view.py等文件会显得较为臃肿,当然也根据个人习惯,这时我们可以使用文件夹的方式: 原本我的views.py中有着这些函数: 现在我在web的app下命名一

    2024年02月07日
    浏览(38)
  • Python智能家居系统后端源码,基于Django+MQTT+ESP8266的智能家居系统源码

    代码下载地址:Python智能家居系统后端源码 服务器硬件环境: 处理器:Intel® Xeon® CPU E5-2680 v4 @ 2.40GHz 1核 内存:2GB 硬盘空间:60GB 单片机环境: 单片机:ESP8266-12E NodeMCU 开发环境:Arduino IDE(1.8.19) 软件环境: 操作系统:Ubuntu 18.04 LTS 编程语言:Python(3.7.9) Web后端框架:

    2024年02月02日
    浏览(57)
  • Django密码修改和重置视图

    Django除了提供身份登录和注销视图,还提供了密码修改和重置的视图。 目录 修改密码视图 重置密码视图 自定义模版 关于Django身份验证更多内容,请查看 Django身份验证初试-CSDN博客 Django登录注销视图-CSDN博客 集成Django的身份验证视图来修改密码。 打开account应用的urls.py文件

    2024年01月22日
    浏览(57)
  • Django笔记(四):视图views

    视图view处理客户端请求并生成响应数据,可简单认为编写接口的部分。 上述index视图,会返回一个“hello world”的响应。 render返回html,JsonResponse返回json格式(字典),redirect重定向到其他页面,可以是个完整url也可以是某个路由的name,笔记(三)urls中每条路由配置可以设置

    2024年01月19日
    浏览(35)
  • Django框架之视图HttpResponse 对象

    本篇文章主要内容为:视图中HttpResponse对象的属性、方法及json、redirect子类包含使用cookie使用、跳转、json返回的示例。 HttpResponse对象是对用户访问的响应,与HttpRequest对象由django创建,HttpResponse对象是由开发人员创建。HttpResponse对象属于django.http模块,可以通过向构造函数传

    2024年02月04日
    浏览(39)
  • Django(5)-视图函数和模板渲染

    Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」 在我们的投票应用中,我们需要下列几个视图: 问题索引页——展示最近的几个投票问题。 问题详情页——展示某个投票的问题和不带结果的选项列表。 问题结果页——展示某个投票的结果。 投票处理器—

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包