更新视图——基于函数的视图 Django

简介: 更新视图——基于函数的视图 Django

更新视图是指一种视图(逻辑),用于从数据库中更新表的特定实例,并提供一些额外的细节。它用于更新数据库中的条目,例如,更新 geeksforgeeks 上的文章。所以更新视图必须在表单中显示旧数据,并让用户只从那里更新数据。Django 为更新视图提供了非凡的支持,但让我们检查一下它是如何通过基于函数的视图手动完成的。本文围绕更新视图展开,其中涉及Django Forms、Django Models等概念。

对于更新视图,我们需要一个包含一些模型和多个实例的项目,它们将被显示。基本上,更新视图是详细视图和创建视图的组合。

Django 更新视图——基于函数的视图

如何使用示例创建和使用更新视图的说明。考虑一个名为 geeksforgeeks 的项目,它有一个名为 geeks 的应用程序。

在你有一个项目和一个应用程序之后,让我们创建一个模型,我们将通过我们的视图创建它的实例。在 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()

现在我们已经为后端做好了一切准备。验证是否已从**http://localhost:8000/admin/geeks/geeksmodel/** 创建实例

95.png现在我们将为这个模型创建一个 Django ModelForm,在 geeks 文件夹中创建文件 forms.py,

from django import forms
from .models import GeeksModel
# 创建表单
class GeeksForm(forms.ModelForm):
  # 创建 meta 类
  class Meta:
    # 指定要使用的模型
    model = GeeksModel
    # 指定要使用的字段
    fields = [
      "title",
      "description"]

对于 Update_view,需要一些标识来获取模型的特定实例。通常它是唯一的主键,例如id。要指定这个标识,我们需要在 urls.py 中定义它。转到geeks/urls.py,

from django.urls import path
# 从视图导入 views..py
from .views import update_view, detail_view
urlpatterns = [
  path('<id>/', detail_view ),
  path('<id>/update', update_view ),
]

让我们用解释创建这些视图。在 geeks/views.py 中,

from django.shortcuts import (get_object_or_404,
              render,
              HttpResponseRedirect)
# 表格的相对导入
from .models import GeeksModel
from .forms import GeeksForm
# 更新后会重定向到 detail_View
def detail_view(request, id):
  # 以字段名称为键的初始数据字典
  context ={}
  # 在初始化期间添加字典
  context["data"] = GeeksModel.objects.get(id = id)
  return render(request, "detail_view.html", context)
# 更新视图以获取详细信息
def update_view(request, id):
  # 以字段名称为键的初始数据字典
  context ={}
  # 获取与传递的 id 相关的对象
  obj = get_object_or_404(GeeksModel, id = id)
  # 将对象作为实例传递给表单
  form = GeeksForm(request.POST or None, instance = obj)
  # 保存表单中的数据并重定向到 detail_view
  if form.is_valid():
    form.save()
    return HttpResponseRedirect("/"+id)
  # 将表单字典添加到上下文
  context["form"] = form
  return render(request, "update_view.html", context)

现在在模板文件夹中创建以下模板, 在 geeks/templates/update_view.html 中,

<div class="main">
  <!-- Create a Form -->
  <form method="POST">
    <!-- Security token by Django -->
    {% csrf_token %}
    <!-- form as paragraph -->
    {{ form.as_p }}
    <input type="submit" value="Update">
  </form>
</div>

在 geeks/templates/detail_view.html 中,

<div class="main">
  <!-- Display attributes of instance -->
  {{ data.title }} <br/>
  {{ data.description }}
</div>

让我们检查一下是否一切正常,访问**http://localhost:8000/1/update**。96.png

在这里您可以看到已经从实例中填充数据的表单,现在可以编辑这些数据并轻松更新它,让我们检查一下 97.png

点击更新并完成。 98.png


目录
相关文章
|
4月前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
70 2
|
4月前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
43 1
|
3月前
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
4月前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
82 0
|
4月前
|
安全 API Python
Django 如何使用视图动态输出 CSV 以及 PDF
Django 如何使用视图动态输出 CSV 以及 PDF
52 4
|
4月前
|
Linux Shell 数据库
python Django教程 之 安装、基本命令、视图与网站
python Django教程 之 安装、基本命令、视图与网站
|
4月前
|
测试技术 Shell 数据库
Django视图测试:构建可靠Web应用的关键步骤
Django视图测试:构建可靠Web应用的关键步骤
31 0
|
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