django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询 】

下面我将详细讲解关于Django框架中使用views.py的函数对表进行增删改查内容操作的攻略。

1. models.py中表的创建

首先,在使用views.py中的函数对表进行操作之前,需要先在models.py中创建相应的数据库表。在Django框架中,创建表需要使用到models模块。具体步骤如下:

  1. 打开项目目录中的models.py文件,导入必要的模块,例如:

python
from django.db import models

  1. 创建数据库表需要继承models.Model类,例如:

python
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
publish_time = models.DateField()

在上面的代码中,我们定义了一张名为Book的表,该表包含title、author、publish_time三个字段。

  1. 在定义表字段时,需要使用models模块提供的数据类型,例如上面的CharField、DateField等。

  2. 定义表字段时还可以指定相关属性,例如最大长度、默认值等等,具体可以参考Django官方文档。

2. views.py中函数的使用

在定义好表结构之后,就可以在views.py中定义相应的函数来对表进行增删改查操作了。在Django框架中,每个函数都需要响应一个HTTP请求并返回相应结果。具体步骤如下:

  1. 打开项目目录中的views.py文件,导入必要的模块和表结构,例如:

python
from django.shortcuts import render
from .models import Book

  1. 定义函数,例如:

python
def book_list(request):
books = Book.objects.all()
return render(request, 'book_list.html', {'books': books})

在上面的代码中,我们定义了一个名为book_list的函数,该函数接收一个request参数并返回html页面。该函数从数据库中获取所有书籍的信息,传入模板进行渲染,并将书籍信息作为字典传递给模板渲染。

  1. 在定义函数时,需要使用ORM(Object Relational Mapping)方式来进行数据库操作。Django框架提供了非常丰富的ORM操作方式,例如上面的Book.objects.all()操作返回该表中的所有记录,Book.objects.filter(title='Python')则返回title字段为Python的所有记录。

  2. 在定义函数时还需要注意函数名称的命名规则,例如book_list函数对应着book_list.html模板文件,该文件需要放置在项目目录下的templates目录中。

3. 基于对象的跨表查询

除了单个表的查询之外,Django框架还支持基于对象的跨表查询。例如,如果存在Book表和Author表,且两个表之间存在外键关系,则可以通过以下方式进行跨表查询:

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

在上面的代码中,Book表中的author字段是一个外键,它引用了Author表。我们可以通过以下方式查询某个作者所写的所有书籍:

author = Author.objects.get(name='Tom')
books = author.book_set.all()

在上面的代码中,我们首先获取了名为Tom的作者对象,然后通过book_set属性获取到该作者所写的所有书籍对象,book_set是Django框架根据外键关系生成的一个属性。可以看到,在Django框架中进行基于对象的跨表查询非常方便。

示例一:基于表间的关联进行查询

下面我们来看一个具体的示例。假设项目中除了Book表之外还有一个Author表,两张表之间存在外键关系,且一个作者可以写多本书。

在models.py中定义Author表和Book表的结构:

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

在views.py中定义函数,实现查询某个作者所写的所有书籍:

def author_books(request, author_id):
    author = Author.objects.get(id=author_id)
    books = author.book_set.all()
    return render(request, 'author_books.html', {'author': author, 'books': books})

在上面的代码中,我们首先通过id参数获取到特定的作者对象,再通过book_set属性获取该作者所写的所有书籍对象,把结果传入html页面author_books.html中进行渲染。

在author_books.html中可以按照如下方式进行渲染:

<h2>{{ author.name }}</h2>
<ul>
{% for book in books %}
    <li>{{ book.title }}</li>
{% endfor %}
</ul>

通过上述代码,我们可以显示特定作者的姓名以及该作者所写的所有书籍。

示例二:基于搜索条件进行查询

我们再来看一个基于搜索条件进行查询的例子。假设我们有一个Student表,其中每个学生对象包含name、age、gender三个属性,在前端页面中需要实现根据姓名、性别和年龄进行查询的功能。

在views.py中定义函数,实现根据搜索条件查询学生对象:

def search_student(request):
    name = request.GET.get('name', '')
    age = request.GET.get('age', '')
    gender = request.GET.get('gender', '')
    students = Student.objects.all()
    if name:
        students = students.filter(name=name)
    if age:
        students = students.filter(age=age)
    if gender:
        students = students.filter(gender=gender)
    return render(request, 'search_student.html', {'students': students, 'name': name, 'age': age, 'gender': gender})

在上面的代码中,我们根据查询参数进行相应的条件筛选,如根据name参数查询姓名包含该字符串的所有学生对象,根据age参数查询年龄为该字符串的所有学生对象,以此类推。最终把筛选后的学生对象传入html页面search_student.html中进行渲染。

在search_student.html中可以按照如下方式进行渲染:

<form method="get" action="">
    <input type="text" name="name" value="{{ name }}"/>
    <input type="text" name="age" value="{{ age }}"/>
    <input type="text" name="gender" value="{{ gender }}"/>
    <input type="submit" value="查询"/>
</form>
<ul>
{% for student in students %}
    <li>{{ student.name }} {{ student.age }} {{ student.gender }}</li>
{% endfor %}
</ul>

通过上述代码,我们可以在前端页面显示三个输入框和一个查询按钮,用户可以根据自己的需求输入不同的搜索条件进行查询,页面会自动更新并显示符合条件的学生对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询 】 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django框架:13、csrf跨站请求伪造、auth认证模块及相关用法

    Django框架 目录 Django框架 一、csrf跨站请求伪造 1、简介 2、csrf校验策略 form表单csrf策略 ajax请求csrf策略 3、csrf相关装饰器 FBV添加装饰器方式 CBV添加装饰器方式 二、auth认证模块 1、简介 2、auth认证相关模块及操作 auth 模块 User 模块 login_required 模块 3、拓展…

    2023年4月10日
    00
  • Django笔记二十之手动编写migration文件

    本文首发于公众号:Hunter后端原文链接:Django笔记二十之手动编写migration文件 前面介绍过,migration 文件主要记录的是 Django 系统 model 的变化,然后通过 migrate 命令将变化适配到数据库中。 比如在某个 application 下新增了某张表,或者对某张表更改了字段,可以生成 migration 文件,然后通…

    2023年4月10日
    00
  • Django实现分页功能

    Django是一个基于MVT模式的Web框架,提供了方便的分页功能,可以进行快速的实现。在实践中,分页功能也是Web应用中必不可少的一部分。 本文将详解Django实现分页功能的完整攻略,过程中提供代码示例。 首先,需要安装Django框架,可以使用pip进行安装。 pip install django 在视图函数中,需要对数据进行分页处理。假设有一个数据模…

    Django 2023年3月13日
    00
  • django数据库动态添加列

      方法一:  python manage.py migrate       方法二:  python manage.py migrate         效果: —〉  

    Django 2023年4月12日
    00
  • django实现分页功能

    在个人博客或者网站上,我们发表文章经常会对博客进行分页,下面代码用django实现: django有它自带的分页功能:Paginator 不过我们用在它基础上开发的另一个包:django-pure-pagination  先了解一下这个包特性: 1、使用与django.core相同的API,因此与现有代码完全兼容。 2、它考虑了现有的GET参数,具有动态查询…

    Django 2023年4月11日
    00
  • django之对django内置的User模型进行自定义扩展方式

    对django内置的User模型进行自定义扩展可以使用Django提供的User模型扩展机制。下面详细讲解对django内置的User模型进行自定义扩展方式的完整攻略。 一、创建扩展模型 第一步是创建扩展模型,继承自Django内置的User模型,并添加想要扩展的字段。这里我们以添加nickname为例。创建一个新的app,这里我们取名为account: #…

    Django 2023年5月16日
    00
  • Django高并发负载均衡实现原理详解

    您好,以下是“Django高并发负载均衡实现原理详解”的完整攻略: Django高并发负载均衡实现原理详解 什么是负载均衡 负载均衡是指在多台服务器之间分配工作任务,来平衡服务器之间的工作负载,提高整体系统效率和可用性。 Django实现负载均衡的方法 Django实现负载均衡的常用方法有两种:硬件负载均衡和软件负载均衡。硬件负载均衡一般是指通过硬件设备(例…

    Django 2023年5月16日
    00
  • Python采用Django开发自己的博客系统

    接下来我们会详细讲解如何使用Python的Django框架开发自己的博客系统,并给出两条示例说明。 一、 Django框架简介 Django是一个基于Python的高级Web框架。它注重开发效率,提供了一系列的组件和工具,可以让开发者快速构建出高质量的Web应用。Django框架的核心组件包括模型层、视图层和模板层。其中,模型层负责数据处理和数据库操作,视图…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部