Django 中的视图 | Python

简介: Django 中的视图 | Python

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 中。)



71.png

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/ ,73.png

要查看如何使用 Django 的 MVT(模型、视图、模板)结构制作基本项目,请访问创建 Django 项目

视图类型

Django 视图分为两大类:-

  • 基于函数的视图
  • 基于类的视图74.png

基于函数的视图

基于函数的视图是使用 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/ 创建实例77.png

让我们为其创建一个视图和模板。在 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/ 上有什么78.png

类似地,基于函数的视图可以用创建、更新、检索和删除视图的逻辑来实现。

基于类的视图

基于类的视图提供了另一种将视图实现为 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/ 上有什么79.png


目录
相关文章
|
2月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
90 1
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
162 45
|
1月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
56 2
|
1月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
43 1
|
2月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
38 4
|
2月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第10天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django以功能全面、文档完善著称,适合快速开发;Flask轻量灵活,易于上手;Pyramid介于两者之间,兼顾灵活性和安全性。选择框架时需考虑项目需求和个人偏好。
38 1
|
2月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第6天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django功能全面,适合快速开发;Flask灵活轻量,易于上手;Pyramid介于两者之间,兼顾灵活性和可扩展性。文章分析了各框架的优缺点,帮助开发者根据项目需求和个人偏好做出合适的选择。
47 4
|
3月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
120 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
3月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
105 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
2月前
|
存储 Shell 数据库
Python编程--Django入门:用户账户(二)
Python编程--Django入门:用户账户(二)
23 2