在上一篇文章中,我们介绍了设置 Django 项目的基础知识并创建了练习模型,我们将其以列表的形式显示在前端。在本文中,我们将深入探讨执行 CRUD 操作。对于那些不熟悉的人来说,CRUD 代表创建、读取、更新和删除 — 本质上是您可以对数据执行的四个基本操作。
现在我们已经在应用文件夹中设置了 API,我们只需扩展索引视图来处理创建、更新和删除请求。
让我们设置一个允许用户创建练习的表单。我们将再次使用 HTML 模板来实现此目的。首先,在 app/templates 文件夹中创建一个名为 add_exercise.html 的新模板。
接下来,在我们的 index.html 模板中,我们将使用以下方法包含 add_exercise.html 模板:
{% extends "base.html" %} {% block content %}Exercises
{% include 'add_exercise.html' %} ... {% endblock %}
我们在这里利用 include 标签,它可以提高 HTML 模板的可组合性,使我们的代码更易于维护和理解。如果您在浏览器中刷新页面,您应该会看到该表单出现在屏幕上。
在我们的 HTML 中,我们使用
我们再次对列表中的每个练习使用
在我们的练习视图中,我们将进行以下更改以区分请求。
def index(request): if request.method == 'POST': create = 'create' in request.POST update = 'update' in request.POST if create == True: models.Exercise.create(request) elif update == True: models.Exercise.update(request) return redirect('/') exercises = ( models.Exercise.objects.all().order_by("created_at") ) return render(request, "index.html", context={'exercises': exercises})
我们检查按钮名称并相应地将请求转发到适当的练习方法。
让我们向 app/models.py 中的 Exercise 模型添加更新类方法。
def update(request): id = request.POST.get('id') title = request.POST.get('title') date = request.POST.get('date') exercise = Exercise.objects.filter(pk=id).update(title=title, date=date) return exercise
要更新数据库中的行,我们可以使用 Exercise 模型上提供的更新方法。然而,在更新之前,我们需要确保我们更新的是正确的练习。为此,我们按主键 id 过滤练习,并仅更新该特定练习。
同样,我们将在exercise.html模板中的每个练习旁边添加一个删除按钮。
我们将把delete设置为name属性的值,并在views.py中,我们将扩展if...elif语句来处理删除操作。
def index(request): if request.method == 'POST': create = 'create' in request.POST update = 'update' in request.POST delete = 'delete' in request.POST if create == True: models.Exercise.create(request) elif update == True: models.Exercise.update(request) elif delete == True: models.Exercise.delete(request) return redirect('/') exercises = ( models.Exercise.objects.all().order_by("created_at") ) return render(request, "index.html", context={'exercises': exercises})
在练习模型中,我们将添加类方法delete。
def delete(request): id = request.POST.get('id') is_deleted = Exercise.objects.filter(pk=id).delete() if is_deleted == 1: return True return False
通过此添加,我们已在 Python 和 Django 应用程序中成功实现了 CRUD 操作。
from django.http import HttpResponseRedirect def index(request): ... return redirect('/') # or return HttpResponseRedirect(request.META['HTTP_REFERER'])
总之,通过有效管理我们的 POST 请求并确保正确的重定向,我们可以在 Django 应用程序中实现 CRUD 操作的同时创建无缝的用户体验。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3