Django Views 是M V T Structure of Django的重要参与者之一。根据 Django 文档,视图函数是接受Web 请求并返回 Web 响应的 Python 函数。此响应可以是网页的 HTML 内容、重定向、404 错误、XML 文档或图像,以及 Web 浏览器可以显示的任何内容。
Django 视图是用户界面的一部分——它们通常将模板文件中的 HTML/CSS/Javascript 渲染成您在渲染网页时在浏览器中看到的内容。(请注意,如果您使用过其他基于MVC (Model-View-Controller)的框架,请不要混淆 Django 视图和 MVC 范例中的视图。Django 视图大致对应于 MVC 中的控制器,而 Django 模板对应于视图在 MVC 中。)
Django 查看示例
如何使用示例创建和使用 Django 视图的说明。考虑一个名为 geeksforgeeks 的项目,它有一个名为 geeks 的应用程序。
准备好项目后,我们可以在 geeks/views.py 中创建一个视图,
# 从 django 导入 Http 响应 from django.http import HttpResponse # 获取日期时间 import datetime # 创建一个函数 def geeks_view(request): # 获取日期和时间 now = datetime.datetime.now() # 转换为字符串 html = "Time is {}".format(now) # 返回响应 return HttpResponse(html)
让我们一次一行地浏览这段代码:
- 首先,我们从 django.http 模块导入类HttpResponse以及 Python 的 datetime 库。
- 接下来,我们定义一个名为 geeks_view 的函数。这是视图功能。每个视图函数都将一个 HttpRequest 对象作为其第一个参数,通常命名为 request。
- 该视图返回一个 HttpResponse 对象,其中包含生成的响应。每个视图函数负责返回一个HttpResponse对象。
有关 HttpRequest 和 HttpResponse 的更多信息,请访问 - Django 请求和响应周期 - HttpRequest 和 HttpResponse 对象让我们在 geeks/urls.py 中让这个视图正常工作,
from django.urls import path # importing views from views..py from .views import geeks_view urlpatterns = [ path('', geeks_view), ]
现在,访问http://127.0.0.1:8000/ ,
要查看如何使用 Django 的 MVT(模型、视图、模板)结构制作基本项目,请访问创建 Django 项目。
视图类型
Django 视图分为两大类:-
- 基于函数的视图
- 基于类的视图
基于函数的视图
基于函数的视图是使用 python 中的函数的编写器,该函数接收作为参数 HttpRequest 对象并返回一个 HttpResponse 对象。基于函数的视图一般分为4种基本策略,即CRUD(创建、检索、更新、删除)。CRUD 是任何用于开发的框架的基础。
基于函数的视图示例 –
让我们创建一个基于函数的视图列表视图来显示模型的实例。让我们创建一个模型,我们将通过我们的视图创建它的实例。在 geeks/models.py 中,
# 从内置库中导入标准 Django 模型 from django.db import models # 声明一个名为“GeeksModel”的新模型 class GeeksModel(models.Model): # 模型字段 title = models.CharField(max_length = 200) description = models.TextField() # 用标题名称重命名模型的实例 def __str__(self): return self.title
创建此模型后,我们需要运行两个命令才能为其创建数据库。
Python manage.py makemigrations Python manage.py migrate
现在让我们使用 shell 创建这个模型的一些实例,运行表单 bash,
Python manage.py shell
输入以下命令
>>> from geeks.models import GeeksModel >>> GeeksModel.objects.create( title="title1", description="description1").save() >>> GeeksModel.objects.create( title="title2", description="description2").save() >>> GeeksModel.objects.create( title="title2", description="description2").save()
现在,如果您想在管理面板中查看您的模型及其数据,那么您需要注册您的模型。让我们注册这个模型。在 geeks/admin.py 中,
from django.contrib import admin from .models import GeeksModel # Register your models here. admin.site.register(GeeksModel)
现在我们已经为后端准备好了一切。验证是否已从http://localhost:8000/admin/geeks/geeksmodel/ 创建实例
让我们为其创建一个视图和模板。在 geeks/views.py 中,
from django.shortcuts import render # 表格的相对导入 from .models import GeeksModel def list_view(request): # 以字段名称为键的初始数据字典 context ={} # 在初始化期间添加字典 context["dataset"] = GeeksModel.objects.all() return render(request, "list_view.html", context)
在 templates/list_view.html 中创建模板,
<div class="main"> {% for data in dataset %}. {{ data.title }}<br/> {{ data.description }}<br/> <hr/> {% endfor %} </div>
让我们检查一下http://localhost:8000/ 上有什么
类似地,基于函数的视图可以用创建、更新、检索和删除视图的逻辑来实现。
基于类的视图
基于类的视图提供了另一种将视图实现为 Python 对象而不是函数的方法。它们不会取代基于函数的视图,但与基于函数的视图相比,它们具有一定的区别和优势:
- 与特定 HTTP 方法(GET、POST 等)相关的代码组织可以通过单独的方法而不是条件分支来解决。
- 诸如混合(多重继承)之类的面向对象技术可用于将代码分解为可重用的组件。
基于类的视图比基于函数的视图更易于管理且更高效。具有大量代码行的基于函数的视图可以转换为仅具有几行代码的基于类的视图。这就是面向对象编程产生影响的地方。
基于类的视图示例 –
在 geeks/views.py 中,
from django.views.generic.list import ListView from .models import GeeksModel class GeeksList(ListView): # 指定列表视图的模型 model = GeeksModel
现在创建一个 URL 路径来映射视图。在 geeks/urls.py 中,
from django.urls import path # importing views from views..py from .views import GeeksList urlpatterns = [ path('', GeeksList.as_view()), ]
在templates/geeks/geeksmodel_list.html中创建一个模板,
<ul> <!-- Iterate over object_list --> {% for object in object_list %} <!-- Display Objects --> <li>{{ object.title }}</li> <li>{{ object.description }}</li> <hr/> <!-- If objet_list is empty --> {% empty %} <li>No objects yet.</li> {% endfor %} </ul>
让我们检查一下http://localhost:8000/ 上有什么