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

yizhihongxing

下面我将详细讲解关于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模板继承方法(详细步骤)

    Django模板继承是一种将共同的结构元素封装在基础模板中并在子模板中使用的技术。 它使您能够在多个网页中共享HTML和CSS代码,并确保应用程序的所有页面都符合相同的品牌标准和布局。 下面是Django模板继承过程的完整攻略: 步骤1:创建基础模板 创建包含通用结构元素的基础模板是第一步。 这些结构元素可以是网页的标题,导航选项卡,页脚等。 以下是基础模板…

    Django 2023年3月12日
    00
  • django1.11如何实时访问mysql数据库

    前几天,一直在研究django框架,发现它自身封装了很多有用的API,很有意思。比如,数据库操作基本的创表,查询,插值,更新,删除都有,很方便,再加上json库可以直接将数据json化,通过服务器传给前端并显示,连数据库也很快,响应迅速。 django 操作mysql数据库   取数据: 1 from blog.models import SfhdPredi…

    2023年4月10日
    00
  • Django项目实战之配置文件详解

    我可以为您讲解一下“Django项目实战之配置文件详解”的攻略。 什么是配置文件? Django是一种MVC(Model-View-Controller)框架,它的配置文件告诉Django如何应用程序构建。一个基本的Django项目包含两个配置文件: settings.py:定义了项目需要的所有设置,包括调试模式、数据库、模板、静态文件、中间件、应用程序、语…

    Django 2023年5月16日
    00
  • Python 中Django安装和使用教程详解

    首先,Django是Python语言中一款非常流行的Web框架,提供了一套完备的解决方案,包括快速开发和丰富的功能扩展。 要安装和使用Django,可以遵循以下步骤: 安装Python Django是基于Python开发的,因此必须先安装Python。可以从Python官方网站下载适合自己操作系统的安装包,并根据安装向导完成Python的安装。 安装Djan…

    Django 2023年5月16日
    00
  • 在pycharm中创建django项目的示例代码

    在 PyCharm 中创建 Django 项目的示例代码 在 PyCharm 中创建 Django 项目非常简单。以下是在 PyCharm 中创建 Django 项目的示例代码: 步骤一:创建 Django 项目 在 PyCharm 中,我们可以使用 Django 模板来创建 Django 项目。以下是创建 Django 项目的步骤: 打开 PyCharm,…

    Django 2023年5月17日
    00
  • Django之ORM字段和参数

    字段 常用字段 AutoField                                                                                                                                                                   …

    Django 2023年4月9日
    00
  • 详解Django之auth模块(用户认证)

    下面我将详细讲解“详解Django之auth模块(用户认证)”的完整攻略,并且会包含两条示例说明,其内容如下: 详解Django之auth模块(用户认证) 什么是Django auth模块? Django auth是Django的一个内置模块,用于提供用户认证、用户组、权限等功能。它提供了一组可重用的视图和模板,可以快速构建用户注册、登录、注销等功能。在Dj…

    Django 2023年5月16日
    00
  • Django中login_required装饰器的深入介绍

    下面是关于“Django中login_required装饰器的深入介绍”的完整攻略: 登录验证 在Web开发中,很多功能都需要用户登录之后才能使用。在Django中,我们通过django中内置的装饰器login_required来实现这个功能。 使用login_required装饰器可以很方便的验证用户是否登录。如果未登录,装饰器会将请求重定向到登录页面。 …

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