Django ORM与图书管理系统实战:从入门到精通

引言

        Django作为Python最流行的Web框架之一,其ORM(对象关系映射)系统是开发高效数据库应用的核心工具。本文将通过图书管理系统的实战案例,带你从零掌握Django ORM的核心用法,涵盖模型设计、增删改查、高级查询、事务管理及后台管理系统的搭建,助你从入门到精通!

目录

引言

一、Django ORM核心概念

1.1 什么是ORM?

1.2 Django的MVT模式

二、图书管理系统实战

2.1 项目搭建与配置

1. 创建Django项目与应用

2. 配置MySQL数据库

3. 安装PyMySQL驱动

2.2 模型设计

生成数据库表

2.3 实现增删改查(CRUD)

1. 出版社管理

2. 书籍与作者关联

2.4 高级查询技巧

1. 双下划线跨表查询

2. 聚合与分组

3. F查询与Q查询

三、Django Admin后台管理

3.1 创建超级用户

3.2 注册模型

四、常见问题与优化

4.1 性能优化

 4.2 事务处理

五、总结与资源

推荐资源:


一、Django ORM核心概念

1.1 什么是ORM?

ORM(Object Relational Mapping)即对象关系映射,通过将数据库表映射为Python类,字段映射为类属性,数据行映射为对象,开发者无需编写SQL即可操作数据库。优势包括:

  • 简化开发:用Python语法替代SQL语句。

  • 跨数据库兼容:轻松切换数据库(如MySQL、SQLite)。

  • 安全性:自动处理SQL注入等风险。

1.2 Django的MVT模式

  • Model:定义数据结构和数据库交互。

  • View:处理业务逻辑,连接Model和Template。

  • Template:生成HTML页面,负责数据展示。

二、图书管理系统实战

2.1 项目搭建与配置

1. 创建Django项目与应用

django-admin startproject BookManager
cd BookManager
python manage.py startapp book

2. 配置MySQL数据库

settings.py中修改数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'book_db',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

3. 安装PyMySQL驱动

pip install pymysql

在项目__init__.py中添加:

import pymysql
pymysql.install_as_MySQLdb()

2.2 模型设计

定义出版社、书籍、作者模型:

# models.py
from django.db import models

class Press(models.Model):
    name = models.CharField(max_length=32)

class Book(models.Model):
    title = models.CharField(max_length=32)
    press = models.ForeignKey(Press, on_delete=models.CASCADE)

class Author(models.Model):
    name = models.CharField(max_length=32)
    books = models.ManyToManyField(Book)
生成数据库表
python manage.py makemigrations
python manage.py migrate

2.3 实现增删改查(CRUD)

1. 出版社管理

视图函数示例

# views.py
from django.shortcuts import render, redirect
from .models import Press

def press_list(request):
    presses = Press.objects.all()
    return render(request, 'press_list.html', {'presses': presses})

def add_press(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        Press.objects.create(name=name)
        return redirect('/press_list/')
    return render(request, 'add_press.html')

模板页面(部分):

<!-- press_list.html -->
<table border="1">
    {% for press in presses %}
    <tr>
        <td>{{ press.id }}</td>
        <td>{{ press.name }}</td>
        <td><a href="/delete_press/?id={{ press.id }}">删除</a></td>
    </tr>
    {% endfor %}
</table>

2. 书籍与作者关联

多对多关系操作

# 添加作者与书籍的关联
author_obj.books.add(book1, book2)
# 清空关联
author_obj.books.clear()

2.4 高级查询技巧

1. 双下划线跨表查询

# 查询“清华出版社”出版的所有书籍
books = Book.objects.filter(press__name='清华出版社')

2. 聚合与分组

from django.db.models import Avg
# 按出版社分组查询平均价格
Press.objects.annotate(avg_price=Avg('book__price')).values('name', 'avg_price')

3. F查询与Q查询

from django.db.models import F, Q
# 查询库存大于销量的书籍
Book.objects.filter(stock__gt=F('sold'))
# 组合条件查询(OR)
Book.objects.filter(Q(title__contains='Python') | Q(author__name='张三'))

三、Django Admin后台管理

3.1 创建超级用户

python manage.py createsuperuser

3.2 注册模型

admin.py中注册模型并自定义展示字段:

from django.contrib import admin
from .models import Press, Book

class PressAdmin(admin.ModelAdmin):
    list_display = ['id', 'name']

admin.site.register(Press, PressAdmin)
admin.site.register(Book)

四、常见问题与优化

4.1 性能优化

  • 惰性查询QuerySet延迟执行,避免过早加载数据。

  • select_related:减少外键查询次数。

Book.objects.select_related('press').all()

 4.2 事务处理

from django.db import transaction

with transaction.atomic():
    # 原子操作
    book = Book.objects.create(title='Django进阶')
    author.books.add(book)

五、总结与资源

通过本文,你已掌握:

  1. Django ORM的核心用法与模型设计。

  2. 图书管理系统的完整开发流程。

  3. 高级查询、事务及后台管理技巧。

推荐资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python_chai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值