下面我将详细讲解关于Django框架中使用views.py的函数对表进行增删改查内容操作的攻略。
1. models.py中表的创建
首先,在使用views.py中的函数对表进行操作之前,需要先在models.py中创建相应的数据库表。在Django框架中,创建表需要使用到models模块。具体步骤如下:
- 打开项目目录中的models.py文件,导入必要的模块,例如:
python
from django.db import models
- 创建数据库表需要继承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三个字段。
-
在定义表字段时,需要使用models模块提供的数据类型,例如上面的CharField、DateField等。
-
定义表字段时还可以指定相关属性,例如最大长度、默认值等等,具体可以参考Django官方文档。
2. views.py中函数的使用
在定义好表结构之后,就可以在views.py中定义相应的函数来对表进行增删改查操作了。在Django框架中,每个函数都需要响应一个HTTP请求并返回相应结果。具体步骤如下:
- 打开项目目录中的views.py文件,导入必要的模块和表结构,例如:
python
from django.shortcuts import render
from .models import Book
- 定义函数,例如:
python
def book_list(request):
books = Book.objects.all()
return render(request, 'book_list.html', {'books': books})
在上面的代码中,我们定义了一个名为book_list的函数,该函数接收一个request参数并返回html页面。该函数从数据库中获取所有书籍的信息,传入模板进行渲染,并将书籍信息作为字典传递给模板渲染。
-
在定义函数时,需要使用ORM(Object Relational Mapping)方式来进行数据库操作。Django框架提供了非常丰富的ORM操作方式,例如上面的Book.objects.all()操作返回该表中的所有记录,Book.objects.filter(title='Python')则返回title字段为Python的所有记录。
-
在定义函数时还需要注意函数名称的命名规则,例如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技术站