一、什么是ORM
Django的ORM(Object-Relational Mapping)是Django框架中一个非常重要的组件。ORM可以让开发者以面向对象的方式操作数据库,而不需要直接编写SQL语句。
具体来说,Django ORM提供了以下功能:
模型定义:开发者可以在Django应用中定义Python类来表示数据库表,这些类称为模型(models)。
数据库操作:通过模型类,开发者可以使用Python代码对数据库进行CRUD(创建、读取、更新、删除)操作,而不需要编写SQL语句。
数据库迁移:Django ORM集成了数据库迁移工具,可以自动生成数据库表结构的变更脚本,简化了数据库维护工作。
查询优化:Django ORM会根据开发者编写的Python代码,自动生成高效的SQL语句,提高查询性能。
跨数据库支持:Django ORM支持多种关系型数据库,如MySQL、PostgreSQL、SQLite等,使得迁移数据库变得更加容易。
具体可以理解为:
1、创建一个Django的应用程序
在当前目录执行命令:
pdm run django-admin startapp myapp
这会在当前路径下生成一个myapp的目录
注意,需要在settings.py文件中的INSTALLED_APPS列表中添加刚刚创建的myapp应用程序
2、定义模型(Models),打开myapp/models.py文件,在这里定义您的数据模型。例如:
from django.db import models
# Create your models here.
class Feedback(models.Model):
quality = models.IntegerField(verbose_name='商品质量', default=1)
attitude = models.IntegerField(verbose_name='客服态度', default=1)
speed = models.IntegerField(verbose_name='物流速度', default=1)
text = models.TextField(verbose_name='评论内容', max_length=150, blank=True, null=True)
is_anonymous = models.BooleanField(verbose_name='是否匿名', default=True)
name = models.CharField(max_length=50, blank=True, null=True)
def __str__(self):
return f"Feedback by {self.name or 'Anonymous'}"
3、创建数据库表,也可以说是迁移数据库
在终端中运行以下命令,创建并应用数据库迁移:
migrations (迁移):将Model中的代码内容,应用到数据库中
makemigrations 基于模型的修改创建迁移。
showmigrations 列出项目的迁移和迁移的状态。
sqlmigrate 展示迁移使用的 SQL 语句。
migrate 负责应用和撤销迁移。 主要执行下面两个命令
pdm run python manage.py makemigrations
pdm run python manage.py migrate
pdm run python manage.py makemigrations
这个命令用于创建数据库迁移文件。 当你在models.py中修改了模型定义(比如添加/删除/修改字段)时,运行这个命令会让Django检测到模型的变更,并生成相应的迁移文件。 这些迁移文件包含了如何对数据库进行更改的指令(如添加新表、修改表结构等)。 生成的迁移文件通常位于app/migrations目录下。 pdm run python manage.py migrate
这个命令用于应用数据库迁移。 当你运行这个命令时,Django会检查数据库的当前状态,并应用所有尚未应用的迁移文件。 这意味着,如果你之前使用makemigrations生成了新的迁移文件,migrate命令会将数据库更新到最新状态。 migrate命令还可以回滚之前应用的迁移,从而撤销对数据库的修改。
注意,由于本项目是用的pdm管理,所以上面的命令可以简化成
pdm run init
二、具体用法,在上面的内容中生成了一个叫做FeedBack的模型,也就是一个这样的表,接下来看看如何和views文件结合
1、让我来详细解释一下Django中views文件和models的作用以及它们之间的关系。
views.py文件
views.py文件是Django应用程序的核心部分之一。 在这个文件中,你可以定义Web应用程序的视图函数。 视图函数负责处理HTTP请求,执行必要的业务逻辑,并返回响应结果(通常是HTML页面或JSON数据)。 视图函数是连接URL和应用程序功能的桥梁。 使用models
在视图函数中,你通常需要与数据库进行交互,比如查询数据、创建新记录等。 为此,你需要使用在models.py文件中定义的Django模型(models)。 模型是一个Python类,它代表了数据库中的一个表结构。通过模型,你可以使用Django的ORM(对象关系映射)机制来执行各种数据库操作,而不需要直接编写SQL语句。 views和models的关系
视图函数调用模型,从而实现与数据库的交互。 例如,在视图函数中,你可以使用模型的objects.all()方法来获取数据库中的所有记录,然后将这些记录渲染到一个HTML模板中,最终返回给用户。 通过这种方式,视图函数负责业务逻辑的处理,而模型则负责与数据库的交互。这种分离有助于代码的可维护性和可扩展性。
2、编辑views.py文件
from django.shortcuts import render
from .models import FeedBack
def feedback_view(request):
if request.method == 'POST':
data = request.POST # 获取前端提交的数据
obj = FeedBack()
obj.quality = data['quality']
obj.attitude = data['attitude']
obj.speed = data['speed']
obj.text = data['text']
obj.anonymous = data['anonymous']
obj.save() # 将数据保存到数据库
# 可以执行其他的逻辑,比如返回成功页面等
return render(request, 'feedback_success.html')
# 如果是GET请求,则渲染反馈表单页面
return render(request, 'feedback_form.html')
三、在admin中使用models
在models.py中定义好模型后,运行makemigrations和migrate命令可以创建相应的数据库表。
但是,这只是在数据库层面完成了模型与数据库的对应关系。
如果没有在admin.py中注册这些模型,Django管理后台就无法知道这些模型的存在。
只有在admin.py中注册了模型,Django管理后台才能够:在管理界面上显示这些模型 允许管理员对这些模型的数据进行增删改查操作 因此,如果只是在models.py中定义了模型,但是没有在admin.py中注册,那么将无法在Django管理后台中操作这些模型的数据。
换句话说,admin.py中的注册是一个关键的步骤,它将您在models.py中定义的模型与Django管理后台进行了关联,使得管理后台可以正确地对这些模型进行管理。
所以,您说的对,如果没有在admin.py中进行注册,您将无法在Django管理后台中对数据库进行增删改查操作。这是一个必要的步骤。
3、在Django中,要使用视图函数,还需要在urls.py文件中进行配置,将URL与视图函数进行映射。
上面views.py文件中有一个名为feedback_view的视图函数,那么需要在urls.py文件中进行如下配置
from django.urls import path
from . import views
urlpatterns = [
path('feedback/', views.feedback_view, name='feedback'),
]
Django的ORM允许开发者以面向对象的方式操作数据库,无需直接编写SQL语句。它提供了模型定义、数据库操作、数据库迁移、查询优化和跨数据库支持等功能。在Django应用中,开发者可以定义Python类来表示数据库表,这些类称为模型。通过模型类,开发者可以使用Python代码对数据库进行CRUD操作。Django ORM还集成了数据库迁移工具,可以自动生成数据库表结构的变更脚本,简化了数据库维护工作。在Django管理后台中,只有在admin.py中注册了模型,才能在管理界面上显示这些模型并允许管理员对这些模型的数据进行增删改查操作。